我正在一个项目中尝试读取CSV文件并检查它的各种不同参数。C对我来说是一种新语言,因此我仍然习惯它,并且我的代码可能没有像它那样精简。无论如何,我的问题是这样的:当我读取文件以确保每一行具有相同数量的条目时,它可以正常工作,但是当我尝试将值放入2D数组中时,一切都变得混乱了。arr [0] [0]处的值应该是CSV文件中的第一个值,但是当我打印出要查看的内容时,它始终是最后一行中的第一个值。我一生都无法解决这个问题,而且我一直在看这段代码,并花了几个小时来修改它。任何帮助将非常感激!
int parseFile(int width, int height, char*fileName) {
char*** matrix = malloc(width*height*sizeof(char*));
int counter = 0;
int pointer = 0;
FILE *file = fopen(fileName, "r");
const size_t line_size = 1024;
char* line = (char*) malloc(line_size);
while (fgets(line, line_size, file) != NULL) {
char** data = malloc(width*sizeof(char*));
char *delim = ",";
char *string = strtok(line, delim);
while (string != NULL) {
size_t ln = strlen(string) - 1;
if (string[ln] == '\n') {
string[ln] = '\0';
}
data[counter] = string;
string = strtok(NULL, delim);
counter++;
}
matrix[pointer] = data;
counter = 0;
pointer++;
}
printf("%s", matrix[0][0]);
return 0;
}
这看起来几乎是正确的,但是正在发生的strtok
是将指针返回到行中。这意味着它只有最后一行的副本。
考虑为每行创建一个新的内存插槽,或者strdup
从中获取结果strtok
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句