2012-04-18 74 views
0

我正在制作一个购物清单程序,我想包含一个用户输入字符串,该字符串将其放入文本文件的下一个可用行中。现在,这会将字符串添加到文件中,但是随后会为一些空格放入随机字符,然后,如果我输入其他字符,它将不会在下一行中。将字符串添加到C中的文本文件

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

对其他问题也这样做。 – Jack 2012-04-18 13:04:04

回答

6

此行应该是:

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

你的代码总是写的,而不是字符串已经字符的实数20个字符。

3

除了pivotnig所述的更正之外,fwrite()不会为该文件写入新的行字符。请在fwrite()之后写入新行,或在fwrite()之前将其追加到addItem缓冲区。

你应该避免通过限制复制到buf字符数缓冲区溢出:

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

在当前的例子,如果你会尝试写超过20个字符的项目,你会惹上麻烦的scanf将覆盖未分配的内存。一个稍微改进的版本将是:

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

这样,至少你不会覆盖随机存储器。

编辑:感谢杰克指出\ 0也必须写。

+1

您必须在'addItem'中为0结束符'\ 0'保留一个空格。 – Jack 2012-04-18 13:02:07

相关问题