如何使用C中CSV文件中的字符串(char*)填充二维数组
我正在做一个项目,我试图读取一个CSV文件,并检查它的各种不同的参数。C语言对我来说是一种新语言,所以我仍在习惯它,我的代码可能没有它可能的那么精简。无论如何,我的问题是:当我读取文件以确保每行具有相同数量的条目时,它工作正常,但当我尝试将值放入2D数组时,一切都会变得混乱。arr[0][0]处的值应该是CSV文件中的第一个值,但当我打印出来查看它是什么时,它始终是最后一行中的第一个值。我一辈子都搞不懂这一点,我已经花了好几个小时研究和修改这段代码。任何帮助都将不胜感激如何使用C中CSV文件中的字符串(char*)填充二维数组,c,arrays,string,file,csv,C,Arrays,String,File,Csv,我正在做一个项目,我试图读取一个CSV文件,并检查它的各种不同的参数。C语言对我来说是一种新语言,所以我仍在习惯它,我的代码可能没有它可能的那么精简。无论如何,我的问题是:当我读取文件以确保每行具有相同数量的条目时,它工作正常,但当我尝试将值放入2D数组时,一切都会变得混乱。arr[0][0]处的值应该是CSV文件中的第一个值,但当我打印出来查看它是什么时,它始终是最后一行中的第一个值。我一辈子都搞不懂这一点,我已经花了好几个小时研究和修改这段代码。任何帮助都将不胜感激 int parseFil
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
将指针返回到行中。这意味着它只有最后一行的副本
考虑为每一行创建一个新的内存插槽,或者将strtok的结果从strtok中提取出来(char***matrix=malloc(width*height*sizeof(char))代码>…闻起来很臭。这是什么意思?即使我将所有字符串存储在一个数组中,每次出现新行时,它都会覆盖第一个条目。哎呀,原来是printf(“%s”,matrix[0][0]);但是我在做一些测试,忘了把它改回来。我编辑了上面的代码以获得正确的打印语句。
data[counter]=string代码>:字符串
指向行的一部分