Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
2年前关闭。
我正在尝试将句子字符串写入文本文件,但是当我这样做时它会重复或类似。为什么会这样,如何使它只打印一次?
程序摘录:
当我运行以上命令时,文本文件中的输出(
M0001测试名称测试名称
是off-by-one。您不能使用
引用
字符)放入
因此,这意味着目标必须能够容纳源字符串,包括空终止符。事实证明,您的内存不足。 :)
如果打算使用
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
2年前关闭。
我正在尝试将句子字符串写入文本文件,但是当我这样做时它会重复或类似。为什么会这样,如何使它只打印一次?
程序摘录:
FILE *memberAdd;
typedef struct {
char id[5], name[100];
} Member;
Member reg;
strcpy(reg.id, "M0001");
printf("Name: ");
rewind(stdin);
scanf("%[^\n]", reg.name);
memberAdd = fopen("member.txt", "a");
fprintf(memberAdd, "%s %s\n", reg.id, reg.name);
fclose(memberAdd);
当我运行以上命令时,文本文件中的输出(
reg.name
输入为Test Name
):M0001测试名称测试名称
最佳答案
在你的代码中
strcpy(reg.id, "M0001");
是off-by-one。您不能使用
"M0001"
在5个chars
的数组中存储类似char
(5个strcpy()
和一个空终止符)的字符串。您正在访问超出分配的内存的位置,这会导致undefined behavior。引用
C11
,第§7.24.2.3章strcpy
函数复制s2
指向的字符串(包括终止null字符)放入
s1
指向的数组中。 [...]因此,这意味着目标必须能够容纳源字符串,包括空终止符。事实证明,您的内存不足。 :)
如果打算使用
char
数组作为字符串,则还需要具有存储空终止符的内存。在这种情况下,您可以增加成员id
维度以保留终止null,例如 char id[6];
关于c - 打印到文本文件时字符串重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47923067/