在C中向字符串添加字符串

时间:2012-04-18 12:30:41

标签: c string file

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

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

3 个答案:

答案 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也必须写。