-1
我在用C读CSV文件,并想将strtok()中的标记存储在数组中。不知何故,当CSV文件有多行时,我没有得到正确的令牌输出。 CSV文件看起来像这样(只是两行的这个例子,真正的文件将有超过100行):strtok()没有打印正确的值
abc,def,ghi
jkl,mno
我的代码是:
void main() {
FILE *fp;
fp = fopen("simple.csv", "r");
const char s[2] = ",";
char *token;
char *out[5];
int i = 0;
if (fp != NULL)
{
char line[50];
while (fgets(line, sizeof line, fp) != NULL)
{
token = strtok(line, s);
//for (token; token != NULL; token = strtok(NULL, ","))
while (token != NULL)
{
out[i++] = token;
//printf("%s", token);
token = strtok(NULL, s);
}
printf("%s\n", out[0]);
}
//for (i = 0; i < 5; i++)
fclose(fp);
}
else {
printf("error opening file");
}
}
我希望每个逗号分隔字符串通过循环存储在一个数组中。 当我打印出数组(out[0]
)的第1个要素,输出为:
abc
jkl
,而我希望它只是令牌:
ABC
任何人都可以请让我知道问题是什么?
您使用的是相同的* *'line'为*每*'fgets'缓冲区。所以当然结果会覆盖每一行输入。 – kaylum
我是新手。你能告诉我如何解决这个问题吗? –
是的,他们是第一列。我想将CSV文件中的每个字符串存储到一个数组中。 –