如何使用C中CSV文件中的字符串(char*)填充二维数组

如何使用C中CSV文件中的字符串(char*)填充二维数组,c,arrays,string,file,csv,C,Arrays,String,File,Csv,我正在做一个项目,我试图读取一个CSV文件,并检查它的各种不同的参数。C语言对我来说是一种新语言,所以我仍在习惯它,我的代码可能没有它可能的那么精简。无论如何,我的问题是:当我读取文件以确保每行具有相同数量的条目时,它工作正常,但当我尝试将值放入2D数组时,一切都会变得混乱。arr[0][0]处的值应该是CSV文件中的第一个值,但当我打印出来查看它是什么时,它始终是最后一行中的第一个值。我一辈子都搞不懂这一点,我已经花了好几个小时研究和修改这段代码。任何帮助都将不胜感激 int parseFil

我正在做一个项目,我试图读取一个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
将指针返回到行中。这意味着它只有最后一行的副本


考虑为每一行创建一个新的内存插槽,或者将strtok的结果从strtok中提取出来(char***matrix=malloc(width*height*sizeof(char))…闻起来很臭。这是什么意思?即使我将所有字符串存储在一个数组中,每次出现新行时,它都会覆盖第一个条目。哎呀,原来是printf(“%s”,matrix[0][0]);但是我在做一些测试,忘了把它改回来。我编辑了上面的代码以获得正确的打印语句。
data[counter]=string
字符串
指向
行的一部分