【问题标题】:C programming with files in different modes?使用不同模式的文件进行 C 编程?
【发布时间】:2018-02-22 01:12:27
【问题描述】:
#include<stdio.h>
int main()
{
    FILE *fp;
    char buff[255];

    fp=fopen("test.txt","w");

    printf("File test.txt in w mode\n");
    fprintf(fp,"Template string 1:\n");

    fputs("Template string 2:",fp);
    printf("File test.txt is created at local path\n\n");
    fclose(fp);

    fp=fopen("test.txt","r");
    printf("\n\nFile test.txt in r mode\n");
    fscanf(fp,"%s",buff);
    printf("The content of the file test.txt using fscanf() is:\n%s\n",buff);

    fgets(buff,255,(FILE *)fp);
    printf("The content of the file test.txt using fgets() is :\n%s\n",buff);

    fgets(buff,255,(FILE *)fp);
    printf("The content of the file using fgets() is :\n%s\n",buff);
    fclose(fp);

    fp=fopen("test.txt","a");
    printf("\n\nFile test.txt in a mode\n");
    fprintf(fp,"Template String 3:\n");
    fgets(buff,255,(FILE *)fp);
    printf("After append %s\n",buff);
    fclose(fp);

    fp=fopen("test.txt","r+");
    printf("File test.txt in r+ mode\n");
    fgets(buff,255,(FILE *)fp);
    printf("\n\nThe content of the file test.txt in r+ mode is:\n%s\n",buff);
    fclose(fp);
}

我有上面我理解的代码。我怀疑当我附加字符串“模板字符串 3:”时,我的 fp 将内容添加到文件末尾的文件 test.txt 并且在添加 fp 之后应该指向文件末尾(我希望)但是如果我使用fgets 将文件的内容从 fp 读取到 buff 它应该具有的内容。谁能解释一下此时发生了什么。

【问题讨论】:

  • 请勿发文字图片
  • 使用(FILE *)fp 定义为FILE*fp; 的变量的强制转换是“无害的”但可笑的。

标签: c file append fopen


【解决方案1】:

C 库函数char *fgets(char *str, int n, FILE *stream) 从指定流中读取一行并将其存储到str 指向的字符串中。当读取 (n-1) 个字符、读取换行符或到达文件结尾(以先到者为准)时,它会停止。

这就是为什么代码的最后一部分只显示文件的第一行。而你没有得到printf("After append %s\n",buff); 的输出的原因是文件指针此时位于EOF

当你cat 文件时,你会看到所有的行都在那里。

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2014-12-02
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多