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

标签 c arrays string file csv

我正在开发一个项目,我试图读取 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/

相关文章:

c - 字符串函数中的子字符串搜索给出了不正确的值

c - 在 .c 文件中声明和定义的函数

c - 数组排序和删除重复项

java - 为什么我在战舰游戏中收到错误 java.lang.NullPointerException?

c - 玩转指针,被 char * 字符串弄得晕头转向

c - 在c中对字符进行分组以形成字符串

java - 从一个文件中获取整数列表

c - 如何为数组的任何未填充部分分配空字符,然后将其写入文件?

javascript - 如何在数组中分割数组并使长度正确显示

javascript - 如何检查对象数组是否为空?