gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:42:05 27 4
gpt4 key购买 nike

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

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

将“Hi”替换为“Welcome”时,我得到如下输出

OUTPUT
WelcomeWelcome FalconHawk! Have a great day! //"Welcome" is getting printed two times.

是什么导致了这个问题?

最佳答案

您的缓冲区太小,没有空间容纳终止 null 字节,因此,您的代码会调用未定义的行为。如果你想读 10 个字符,那么你应该这样做

char input[11];
if (scanf("%10s", input) == 1) {
// Safely use `input' here
}

如果您想从 stdin 读取整行文本,请使用 fgets()

if (fgets(input, sizeof input, stdin) != NULL) {
// Safely use `input' here
}
<小时/>

c 中的字符串总是需要一个额外的字节空间来存储终止 '\0',请阅读有关 c 中字符串的基本教程> 了解它们如何工作以及如何治疗它们。

关于c - 在C中读取文件时输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com