当我使用ÈLwìþ(
直接在文件中存储字符数组时,它将其存储在文件中:
#include <stdio.h>
int main()
{
FILE *p;
p=fopen("pa.txt","w+");
char name[100];
printf("Enter a string :");
fputs(name,p);
fclose(p);
getchar();
return 0;
}
为什么会这样?
scanf()
当我使用gets()
或fputs()
在名称中输入时,会存储正确的文本,但如果直接使用mirt
,则会以不常见的格式存储。
为什么会这样?
答案 0 :(得分:2)
当我使用scanf()或gets()获取正确的文本输入时 存储但是当直接使用fputs()时,它以不寻常的格式存储。 为什么会这样?
根据C标准,访问未初始化的变量p
为undefined behaviour,其值为 indeterminate 。没有解释为什么它会发生。只是不要这样做。
6.7.9初始化,(C11草案)
如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。
indeterminate 定义为:
3.19.2不确定
值或未指定的值或陷阱表示
请注意,函数gets()
已从最近的C标准(C11)中删除,并且由于其缓冲区溢出问题,它从未安全。
答案 1 :(得分:1)
当我使用
scanf()
或gets()
输入名称输入时,会存储正确的文本,但直接使用fputs()
时,它会以不寻常的格式存储。为什么会这样?
在使用stdin
将其写出来之前,您无法从fputs
读取数据。
使用:
fgets(name, sizeof(name), stdin);
然后:
fputs(name, p);
答案 2 :(得分:0)
您已打开 char 数组但尚未使用它。分析您将理解的代码。
#include <stdio.h>
int main()
{
char name[100];
FILE *p;
p=fopen("pa.txt","w+");
if(!p) {
perror("Error writing");
return -1;
}
printf("Enter a string :");
scanf("%s",name);
fputs(name,p);
fclose(p);
return 0;
}