-1
C言語のCSVファイルを読み込み、strtok()のトークンを配列に格納したいとします。どういうわけか、CSVファイルに複数の行がある場合、私は正しいトークン出力を得られません。 CSVファイルは次のようになります(この例ではわずか2行、実際のファイルには、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]
)の第一の要素を印刷すると、出力は次のとおりです。
abc
jkl
私はそれだけのトークンであることを期待しながら、:
ABC
誰も私を聞かせてくださいすることができ問題が何であるか知っていますか?
あなたは*すべての* 'fgets'用*同じ*' line'バッファを使用しています。もちろん結果はすべての入力行に上書きされます。 – kaylum
私は初心者です。これを解決する方法を教えてくださいできますか? –
はいこれは最初の列です。私はCSVファイルの各文字列を配列に格納したいと思います。 –