code白 小白 2022-08-25 12:06 采纳率: 100%
浏览 199
已结题

fprintf函数操作后在文本中显示乱码的问题及原因

问题遇到的现象和发生背景

fprintf编译成功但是在文本中会显示乱码
//刚进入文件操作- -

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<process.h>
int main()
{
    FILE *fp;
    char arr[30];
    //char ch;
    //判断是否有文件
    if((fp=fopen("D:\\1111.txt","w"))==NULL)
    {
        printf("打开文件失败\n");
        getchar();
        exit(0);
    }
    //do
    //{
    //    ch=getchar();
    //    //在文件中写入读取的字符
    //    fputc(ch,fp);
    //}while(ch!='#');
    //fclose(fp);
    //fp=fopen("D:\\1111.txt","r");
    //ch=fgetc(fp);
    //while(ch!=EOF)
    //{
 //   
    //    putchar(ch);
    //    //从文件中读取字符到编译器
    //    ch=fgetc(fp);
    //}
    //fclose(fp);
    //printf("\n");
    fp=fopen("D:\\1111.txt","w");
    getchar();
    //输入字符
    gets(arr);
    //写入文件显示出
    fputs(arr,fp);
    //关闭文件
    fclose(fp);
    //fp=fopen("D:\\1111.txt","r");
    ////读取文件到编译器中
    //fgets(arr,sizeof(arr),fp);
    //printf("%s\n",arr);
    ////关闭文件
    //fclose(fp);
    //打开文件准备写入
    fp=fopen("D:\\1111.txt","w");    
    //fprintf(文件类型指针,格式字符串,输出列表)
    //fseek(fp,sizeof(arr),0);
    //以格式字符串的类型写入fp所指的磁盘文件中
    fprintf(fp,"%s",arr);
    fclose(fp);
    //fp=fopen("D:\\1111.txt","r+");
    //fscanf(文件类型指针,格式字符串,输出列表)
    //getchar();
    //fscanf(fp,"%s",arr);
    //printf("%s\n",arr);
    //fclose(fp);
    return 0;
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

试过打印字符在文件文本中还是乱码,是不是哪里写的问题

我想要达到的结果

通过fprintf在文本中完美显示写入的字符串的结果
帮忙说下上面的产生原因,谢谢

  • 写回答

8条回答 默认 最新

  • ChangAn0-0 2022-08-25 15:41
    关注

    问题如下,在代码里给你标注了哈。

    img


    #define _CRT_SECURE_NO_WARNINGS
    //问题1:未包含头文件string.h
    #include<stdio.h>
    #include<process.h>

    int main()
    {
    FILE* fp;
    //问题三:未初始化数组,未用到的内存可能会有乱码
    char arr[30];

    if ((fp = fopen("1111.txt", "w")) == NULL)
    {
        printf("打开文件失败\n");
        getchar();
        exit(0);
    }
       fp = fopen("1111.txt", "w");
    getchar();
    
    gets(arr);//问题四:使用了不安全的gets函数,目前在c11标准中gets函数已被舍弃
               //建议使用fgets函数。或者其他函数。
    fputs(arr, fp);
    
    fclose(fp);
       fp = fopen("1111.txt", "w");
       //问题二:应该为%s,而不是%a;
       fprintf(fp, "%a", arr);
    fclose(fp);
       return 0;
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 修改了问题 8月26日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题