0

食料品リストプログラムを作成していますが、テキストファイルの次の使用可能な行に配置されるユーザー入力文字列を含めたいと思います。今のところ、これはファイルに文字列を追加しますが、その後、いくつかのスペースにランダムな文字を入れます。その後、何か他のものを入力すると、次の行には表示されません。

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

3 に答える 3

6

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

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

コードは、文字列の実際の文字数ではなく、常に20文字を書き込みます。

于 2012-04-18T12:32:02.723 に答える
3

ピボットニグによって述べられた修正を除いfwrite()て、ファイルに改行文字を書き込みません。の後に新しい行を書き込むか、の前にバッファにfwrite()追加します。addItemfwrite()

コピー先の文字数を制限して、バッファオーバーランを防止する必要がありますbuf

scanf("%19s", addItem);
于 2012-04-18T12:37:41.187 に答える
1

現在の例では、20文字を超えるアイテムを書き込もうとすると、scanfが割り当てられていないメモリを上書きするため、問題が発生します。わずかに改善されたバージョンは次のようになります。

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

このようにして、少なくともランダムメモリを上書きすることはありません。

編集:\0も書かなければならないことを指摘してくれたジャックに感謝します。

于 2012-04-18T12:37:41.893 に答える