我正在制作一个购物清单程序,我想要包含一个用户输入的字符串,将其放在文本文件的下一个可用行中。现在,这会将字符串添加到文件中,但它会为多个空格添加随机字符,然后,如果我输入其他内容,则不会在下一行。
void AddToFile(FILE *a) {
char addItem[20];
printf("Enter item: ");
scanf("%s", &addItem);
fwrite(addItem, sizeof(addItem), 1, a);
}
答案 0 :(得分:6)
这一行应该是:
// strlen instead of sizeof
fwrite(addItem, strlen(addItem), sizeof(char), a);
您的代码始终会写入20个字符,而不是字符串所包含的实际字符数。
答案 1 :(得分:3)
除了pivotnig所述的更正之外,fwrite()
不会在文件中写入新的行字符。在fwrite()
之后写下新行,或者在addItem
之前将其附加到fwrite()
缓冲区。
您应该通过限制复制到buf
的字符数来防止缓冲区溢出:
scanf("%19s", addItem);
答案 2 :(得分:1)
在当前示例中,如果您尝试编写超过20个字符的项目,则会遇到麻烦,因为scanf将覆盖未分配的内存。稍微改进的版本将是:
scanf("%19s",&addItem);
这样,至少你不会覆盖随机内存。
编辑:感谢杰克指出\ 0也必须写。