当fput直接用于在文件中写入字符数组时,会存储不同格式的文本

时间:2015-06-10 18:45:22

标签: c

当我使用È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,则会以不常见的格式存储。 为什么会这样?

3 个答案:

答案 0 :(得分:2)

  

当我使用scanf()或gets()获取正确的文本输入时   存储但是当直接使用fputs()时,它以不寻常的格式存储。   为什么会这样?

根据C标准,访问未初始化的变量pundefined 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;
}