そのようにフォーマットされた単純なファイルがあります
NAME|VALUE
NAME|VALUE
NAME|VALUE
これらを読み込んで、構造体の配列に保存しようとしています。構造体はこれです
struct data
{
char* name;
char* value;
};
今のところ、配列のサイズが 3 になることがわかっているので、次のようにしました。
struct data pairs[3];
ファイルから読み込もうとしているコードは次のとおりです。
char *tempVal;
int i =0;
if(file != NULL)
{
char curLine [128];
while(fgets(curLine, sizeof curLine, stockFile) != NULL)
{
tempVal = strtok(curLine,"|");
printf("i:%i\n",i);
pairs[i].name= tempVal;
printf("name at pos %i is %s\n",i, pairs[i].name);
tempVal = strtok(NULL,"|");
pairs[i].value= tempVal;
printf("value at pos %i is %s\n",i, pairs[i].value);
++i;
}
fclose(file);
}
そして、これらのprintfステートメントのそれぞれが途中で正しいものを出力します。次に、これを使用して配列を出力しようとします
int j
for(j = 0; j < 3; j++)
{
printf("ENTRY# %i\NAME:%s\VALUE:%s\n\n",j,pairs[j].name, pairs[j].value);
}
申し訳ありませんが、インデントは少し奇妙です。コード ブロックをいじってみましたが、完璧にはなりませんでした。ただし、while ループ中に正しいものが表示されるのはなぜだろうと思っていますが、ループが完了すると、for ループは同じ名前を持つ 3 つの配列エントリすべてを表示します (3 番目のエントリの値は正しいですが、 1 番目と 2 番目のエントリの値フィールドには、3 番目のエントリの正しい値の半分が含まれます)
ありがとう!