2012-04-18 18 views
0

私は食料品リストプログラムを作成しています。テキストファイルの次の利用可能な行に入力するユーザー入力文字列を含める必要があります。今、これはファイルに文字列を追加しますが、次にいくつかのスペースに対してランダムな文字を入れ、次に何かを入力すると次の行には入りません。Cでテキストファイルに文字列を追加

void AddToFile(FILE *a) { 
    char addItem[20]; 
    printf("Enter item: "); 
    scanf("%s", &addItem); 
    fwrite(addItem, sizeof(addItem), 1, a); 
} 
+0

これは他の質問と同様に行います。 – Jack

答えて

6

この行は次のようになります。

// strlen instead of sizeof 
    fwrite(addItem, strlen(addItem), sizeof(char), a); 

あなたのコードは常に代わりに文字列があり、文字の実数で、20個の文字を書き込みます。

3

pivotnigで示された修正以外に、fwrite()はファイルに改行文字を書きません。 fwrite()の後に改行を書き込むか、fwrite()の前にaddItemバッファに追加してください。

あなたはbufにコピーされた文字数制限することにより、バッファオーバーランを防止する必要がありますあなたは20文字以上で項目を記述しようとする場合、現在の例では

scanf("%19s", addItem); 
1

を、あなたにトラブルになりますscanfは割り当てられていないメモリを上書きします。少し改善されたバージョンは次のようになります:

scanf("%19s",&addItem); 

このように、少なくともランダムなメモリは上書きされません。

編集:\ 0を指摘してくれたジャックに感謝します。

+1

0ターミネータのために 'addItem'にスペースを確保しなければなりません、' \ 0'。 – Jack

関連する問題