C 当fputs直接用于在文件中写入字符数组时,会存储不同格式的文本
当我使用C 当fputs直接用于在文件中写入字符数组时,会存储不同格式的文本,c,C,当我使用fputs()将字符数组直接存储在文件中时,它将其存储在文件中: È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; }
fputs()
将字符数组直接存储在文件中时,它将其存储在文件中:
È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;
}
#包括
int main()
{
文件*p;
p=fopen(“pa.txt”,“w+”);
字符名[100];
printf(“输入字符串:”);
FPUT(名称,p);
fclose(p);
getchar();
返回0;
}
当我使用scanf()
或gets()
以名称输入时,将存储正确的文本,但当直接使用fputs()
时,将以不寻常的格式存储。
为什么会发生这种情况
当我使用scanf()或get()以名称输入时,正确的文本是
已存储,但直接使用fputs()时,它以不寻常的格式存储。
为什么会发生这种情况
根据C标准,访问未初始化变量p
作为其值是不确定的。无法解释为什么会发生这种情况。别那么做
6.7.9初始化(C11草稿)
如果未初始化具有自动存储持续时间的对象
显然,它的值是不确定的
不确定定义为:
3.19.2不确定值可以是未指定的值,也可以是陷阱表示 请注意,函数
gets()
已从最新的C标准(C11)中删除,并且由于其缓冲区溢出问题,它从来都不是安全的
当我使用scanf()
或gets()
以名称输入时,会存储正确的文本,但当直接使用fputs()
时,会以异常格式存储。为什么会发生这种情况
在使用fputs
写出数据之前,您没有从stdin
读取数据
使用:
然后:
fputs(name, p);
您已打开字符数组,但尚未使用它。分析你将理解的代码
#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;
}
#包括
int main()
{
字符名[100];
文件*p;
p=fopen(“pa.txt”,“w+”);
如果(!p){
perror(“错误写入”);
返回-1;
}
printf(“输入字符串:”);
scanf(“%s”,名称);
FPUT(名称,p);
fclose(p);
返回0;
}
您的意思是“为什么访问未初始化的变量会导致意外后果”?您是否将fgets()
与fputs()
混淆?@Mr.Llama,是的,我无法理解它。@chux不,我没有混淆fgets()和fputs()。另请参见我也不明白,当我编译和运行此代码时,它会要求输入,当我不使用scanf()或get()时,它会接受输入。@ameyCU,输入由getchar()
处理,它只读取一个字符。其余部分将被丢弃,因为程序在此之后终止。
#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;
}