用C语言编写文件为什么文件里是乱码?

作者&投稿:丙响 (若有异议请与网页底部的电邮联系)
c语言中,为什么调用文件内的数据会出现乱码~

先确认一下文件是二进制存的吗?如果是,用记事本打开它,应该是看不到数字的。不是说在记事本里输入字符1 2 3 4,然后保存成number.dat,程序就能正确读取的。

二进制读取的时候fopen要写成
fp=fopen("number.dat","rb");rb表示binary:二进制读写。

windows下,编码问题也有可能
VC++6.0以上不存在这种可能
GCC编译器,输入/出默认UTF-8,所以在windows下有问题,添加-finput-charset=GBK -fexec-charset=GBK

也有可能是输出文件编码问题,就是windows的记事本,不支持输出的文件的编码(MAC居多),你换一个编辑器看看,比如UltraEdit。这个是很正常的,比如你在文件里输出一个换行符时,用记事本打开输出文件,则发现变成空格了,实际是记事本读不了

第一个程序:
1. 你是想输入26个字母吧,那缓冲区长度不够,结尾要预留一个'\0'字符,char str[26] 至少要改成 char str[27]
2. 将字符输入文件时,不要写最后一个字符'\0', fwrite(str,1,27,fp) 改为 fwrite(str,1,26,fp); 原因是,文本文件当中是无须'\0'的,可能会导致乱码
3 字符读出来了之后,也要加上 str[26] = '\0' 语句

第二个程序:
1. 缓冲区不够, char str[26], 改为 char str[27]
2. 读取文件函数写错鸟,fwrite 改为 fread; 不要搞 fputs 了,文件是以"r"只读模式打开的
3 假使你把字符读出来了,也要加上 str[26] = '\0' 语句

#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[100];
FILE *fp;
if((fp=fopen("字符串.dat","w"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
gets(str);
fwrite(str,1,26,fp);
fclose(fp);
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
str[26] = '\0';
printf("%s\n",str);
fclose(fp);
return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char str[100];
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fread(str,1,26,fp);
str[26]='\0';
printf("%s\n",str);
fclose(fp);
return 0;
}

char str[26];
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");exit(0);
}
fwrite(str,1,26,fp);fputs("\n",fp);
str的初值在哪呢,你要写什麽进去呢,可不就是乱码了

你到底是读还是写fopen("字符串.dat","r") 以读方式打开
后面又是写fwrite(str,1,26,fp);fputs("\n",fp);

abcdefghijklmnopqrstuvwxyz
Press any key to continue

#include<stdio.h>
#include<stdlib.h>

int main()
{
FILE *fp;
char str[27]={0}; // 问题 一 长度不够 问题二 没有初始化
if((fp=fopen("字符串.dat","r"))==NULL)
{
printf("can't find the file!\n");
exit(0);
}
fread(str,1,27,fp); //问题三 是fread 不是 fwrite 问题四 注意长度 27
printf("%s\n",str);
fclose(fp);
return 0;
}

//后一个程序的
fwrite(str,1,26,fp);fputs("\n",fp); //这是写,不是读。
//改为
fread(str,1,26,fp);fputs("\n",fp);


请问:c语言编译成功后生成后缀名为.o的文件,什么东东,什么作用。_百度...
.o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件 是指源代码经过编译程序产生的能被cpu直接识别二进制代码。由编译器生成,具体的生成方法在不同的开发环境上是不同的.百度百科说.o文件是对象文件 里面包含的内容就是01这样的机器可执行的执令 当你程序要执行时还需要进行链接(link)...

为什么C语言写文件有时是ANSI有时是UTF8格式
可能和编辑器保存时的格式有关。一般对于UTF-16等格式,会在文件开头加上一个byte order mark,即BOM,用来在加载时识别该文件编码。对于没有BOM的文件,一般编辑器会读取一定的内容,对该内容进行分析,并猜测对应的文件编码,所以这种文件不是所有时候会被正确识别,所以会出现乱码。而对于UTF-8,如果...

c语言编译是什么意思
C语言是一种高级编程语言,需要编译器将其转换为可执行的机器码。通过使用编译器软件,将C语言的代码转换为可执行程序,包括二进制文件和可执行代码。C语言的编译过程可以通过命令行或者集成开发环境(IDE)的界面完成。编译器是一种软件,它的主要作用是将高级语言代码转换为可执行的机器语言代码。它将...

C语言源程序文件的后缀是什么?
用于浏览项目信息的,如果用source brower的话就必须有这个文件。可以在project options里去掉Generate Browse Info File,这样可以加快编译进度。 \\x0d\\x0a\\x0d\\x0a.C:用C语言编写的源代码文件。 \\x0d\\x0a\\x0d\\x0a.CLW:ClassWizard生成的用来存放类信息的文件。classwizard信息文件,ini文件...

C语言程序设计是什么?
什么是C语言?C语言的简介。C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体...

c语言编程为什么要多文件呢?
3.便于修改和维护。如果能确定只是某个模块有问题,在模块内解决即可,不需要牵一发而动全身。要升级某一部分的功能,可以只针对具体的模块重新开发,节约成本。其实不只是C语言,许多其它语言也经常使用这种方法。开发大型软件时这种方法非常有效(否则不明显,或者反而有副作用)。对于软件设计来说这不...

C语言中头文件stdlib.h是干什么用的,怎么用?
标准库函数的定义。stdio就是指“standard input & output"标准输入输出,所以源代码中如用到标准输入输出函数时,就要包含这个头文件。例如c语言中的 printf("%d",i); scanf("%d",&i);等函数。include <stdio.h>允许不引用此头文件而直接调用其中的函数,但这种做法是不标准的。也不建议这样做。

C语言的头文件是什么?
include "用户自定义的头文件,如果是你自己写的 .h 头文件,就要用引号括起来"来告诉编译器需要复制到源代码的头文件名称。然后再看 stdio.h。stdio 是 “Standard Input and Output” 的简称,也就是标准输入输出。这个头文件是 C 语言最基础的头文件之一,因为它当中包含有最基本的输入输出函数的...

c语言编写,为什不是我想要的结果,错在哪里?
\/\/你的代码没有问题,应该是输入了中文的逗号 ,导致出错。 \/\/出现大数值,是因为你没有初始化变量。 #include <stdio.h>\/\/引用printf函数的头文件 int max(int x,int y){int z;if(x>y)z=x;elsez=y;return z;}int main(){int a=0,b=0,c=0;scanf("%d,%d",&a,&b);c=max(a...

什么是C语言程序设计?
什么是C语言?C语言的简介。C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体...

达日县17032361769: C语言中写文件,为什么写出的是乱码呢,求大 -
芝昂莱帕: fp=fopen("stud.dat","wb"); //你建立的是二进制文件,这种文件用记事本打开就是乱码,这是正常的.

达日县17032361769: C语言写入文件时出现乱码 -
芝昂莱帕: 你上面输出都用printf("%ld %.1f %s %c\n",p->code,p->mark,p->name,p->sex); 了为啥输出到文件时用fwrite 整个结构给过去期望能有什么好的格式? 建议还是老老实实用fprintf 另外在写完数据 一般加个fflush比较好 可以让缓冲数据都输到文件没有缺失 然后要有一个fclose关闭文件

达日县17032361769: 我用c语言从键盘输入数据保存到文本文件中,为什么是一堆乱码,怎样解决? -
芝昂莱帕: 有两种保存方式:文本方式,二进制方式如果是二进制方式看到的是乱码.

达日县17032361769: c语言这样写为什么输出到文件的是乱码?求指教! -
芝昂莱帕: fputc是针对字符的吧, 你把int型的a换成char型,赋值一个字符试试.向文件中格式化输入得用fprintf();函数原型你百度一下

达日县17032361769: C语言写文件乱码 求解 -
芝昂莱帕: 虽然你的名字叫contact_list.txt,但你用fwrite(cp+i,sizeof(CARD),1,fp)写入文件,实际写入的是二进制文件,直接点开contact_list.txt肯定是乱码的.如果不希望这样的话,可以考虑用fprintf写文件,当然了,要自己实现下把CARD和写入字符串的转换.

达日县17032361769: c语言,为什么会乱码 -
芝昂莱帕: 循环里面应该这样写 for(int i =0;str[i]!='\0';i++) {if(str[i] == c)continue;str1[j++] = str[i];}

达日县17032361769: 为什么我用C语言读入的文件是乱码流? -
芝昂莱帕: 是文本读取的?还是二进制读取的?读取的文件是什么编码的?ANSI?Unicdoe?这些如果没高清,就是在猜谜语

达日县17032361769: C语言问题!!我输出的内容是正确的但是后面会有一堆乱码是怎么回事?? -
芝昂莱帕: 如果输出的是字符串,则是没有正确设置串尾符'\0'(或是正确的串尾符被破坏掉了)的缘故.

达日县17032361769: C语言程序不知道为什么变成乱码了 -
芝昂莱帕:你用U盘复制时出问题了,可能是U盘逻辑格式损坏,也可能是复制过程中出错,你可以打开第二个文件试一试,第二个也是乱码那就十有八九是U盘的问题,重新格式化U盘,第二个文件不是乱码那就是复制第一个文件时出错了,重新去复制一次把. 乱码到老师那里也是乱码~~~

达日县17032361769: C语言读入写出文件,写出文件时出现个别乱码. -
芝昂莱帕: 出问题的原因是你ftell得到的长度和你fread实际读到的字节数不符,原因是windows把回车看作/r/n2个字符,ftell读的时候也按2个算,但是fread读的时候却算一个,就是\n ,这就导致你fwrite的时候比你fread到的要多. 解决办法就是你可以定义一个额外的整数n来记录读到的字符数,并把下面2句改成这样: /*把文件拷贝到buffer中*/n=fread(buffer,1,lSize,pFile);/*写入新文件中*/fwrite(buffer,1,n,newFile);你可以先不改然后把测试文件内容删到只剩下一行,就不会出这个问题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网