CSV中的CSV到数组中

时间:2010-07-02 07:59:34

标签: c arrays csv

我正在尝试将CS​​V文件加载到单维数组中。我可以输出CSV文件的内容,但是在尝试将其复制到数组中时我遇到了一些麻烦。

这是我现有的代码,我意识到这可能很糟糕,但我在教自己:

#include <stdio.h>
#include <string.h>

#define MAX_LINE_LENGTH 1024
#define MAX_CSV_ELEMENTS 1000000

int main(int argc, char *argv[])
{
    char line[MAX_LINE_LENGTH] = {0};
    int varCount = 0;
    char CSVArray[MAX_CSV_ELEMENTS] = {0};

    FILE *csvFile = fopen("data.csv", "r");

    if (csvFile)
    {
        char *token = 0;
        while (fgets(line, MAX_LINE_LENGTH, csvFile)) 
        {
            token = strtok(&line[0], ",");
            while (token)
            {
                varCount++;
                CSVArray[varCount] = *token; //This is where it all goes wrong
                token = strtok(NULL, ",");
            }
        }
        fclose(csvFile);
    }
    return 0;
}

我应该采取更好的方式吗?提前谢谢!

3 个答案:

答案 0 :(得分:2)

*token表示取消引用指针token,它是strtok找到的字符串中第一个字符的地址。这就是为什么你的代码只用每个标记的第一个字符填充CSVArray

你应该有一个char指针数组来指向标记,例如:

char *CSVArray[MAX_CSV_ELEMENTS] = {NULL};

然后为其元素指定一个指针:

CSVArray[varCount] = token;

或者,您可以每次复制整个令牌:

CVSArray[varCount] = malloc(strlen(token)+1);
strcpy(CVSArray[varCount], token);

答案 1 :(得分:0)

你对问题的界限是正确的。这是因为您正在分配指针,而不是复制文本。

在这里试试http://boredzo.org/pointers/获取有关指针的教程。

答案 2 :(得分:0)

您似乎正试图将char *的{​​{1}}放入strtok数组中。

我认为您要将char声明为:

CSVArray