我正在尝试将字符串写入文件,然后读取字符串并输出写入文件的字符串。 例如
INPUT (Input Name)
FalconHawk
OUTPUT
Hi FalconHawk! Have a great day!
我的代码是:
#include<stdio.h>
void main(){
char n[10],r[1000];
FILE *fptr,*fpt;
scanf("%s",n); //Input name
fptr=fopen("welcome.txt","w");
fprintf(fptr,"%s",n); //Write to file
fclose(fptr);
fpt=fopen("welcome.txt","r");
fscanf(fpt,"%s",r);
printf("Hi %s! Have a good day.",r); //Output file content
fclose(fpt);
}
但由于某种原因,我得到了像
这样的输出INPUT (Input Name)
FalconHawk
OUTPUT
HiHi FalconHawk! Have a great day! //"Hi" is getting printed two times
用“欢迎”替换“你好”我得到了像
这样的输出OUTPUT
WelcomeWelcome FalconHawk! Have a great day! //"Welcome" is getting printed two times.
导致此问题的原因是什么?
答案 0 :(得分:0)
您的缓冲区太小而且终止null
字节没有空间,因此,您的代码会调用未定义的行为。如果你想读10个字符,那就是你应该这样做的方式
char input[11];
if (scanf("%10s", input) == 1) {
// Safely use `input' here
}
如果您想从 stdin 中读取整行文本,请改用<{1}}
fgets()
c 中的字符串总是需要一个额外的空格字节来存储终止if (fgets(input, sizeof input, stdin) != NULL) {
// Safely use `input' here
}
,阅读 c 中字符串的基本教程以了解它们是如何工作的以及如何对待它们。