在C中读取文件时输出错误

时间:2017-09-04 17:36:08

标签: c file

我正在尝试将字符串写入文件,然后读取字符串并输出写入文件的字符串。 例如

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.

导致此问题的原因是什么?

1 个答案:

答案 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 中字符串的基本教程以了解它们是如何工作的以及如何对待它们。