我正在开发一个项目,我试图读取 CSV 文件并检查它的各种不同参数。 C 对我来说是一门新语言,所以我还在适应它,而且我的代码可能没有那么精简。无论如何,我的问题是这样的:当我读取文件以确保每行具有相同数量的条目时,它工作正常,但是当我尝试将值放入二维数组时,一切都会变得困惑。 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
返回一个指向 line 的指针。这意味着它只有最后一行的副本。
考虑为每一行创建一个新的内存槽,或者strdup
来自strtok
的结果
关于c - 如何使用 C 中的 CSV 文件中的字符串 (char*) 填充二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32805988/