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

除了 pivotnig 声明的更正之外,fwrite()不会将换行符写入文件。在 之后写入新行fwrite()或将其附加到.addItem之前的缓冲区fwrite()

您应该通过限制复制到的字符数来防止缓冲区溢出buf

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

在当前示例中,如果您尝试编写超过 20 个字符的项目,您将遇到麻烦,因为 scanf 将覆盖未分配的内存。稍微改进的版本是:

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

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

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

于 2012-04-18T12:37:41.893 回答