我正在尝试将CSV文件加载到单维数组中。我可以输出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;
}
我应该采取更好的方式吗?提前谢谢!
答案 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