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

绝地武士山姆

我正在一个项目中尝试读取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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章