A. 用C语言编写文件为什么文件里是乱码
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;
}
B. c语言编译运行乱码是什么原因
这种情况多数是由于操作系统的语言选项不正确引起的。建议你查看一下控制面板中的区域和语言选项,特别是有关“非Unicode程序的语言”,一定要选择成“中文(简体,中国)”。然后重启电脑。
C. C语言fwrite写入文件后为什么出现乱码
这个函数以二进制形式对文件进行操作。
按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。
写入数据用fprintf(fp,"%s %s %d 这种方式。不是 fscanf(), 另,注意写出时的格式里要有分隔符空格,否则下次读文件时shu,字符串,数字混在一起无法读。允许同时“读写”的文件,要注意读写位置的控制,必要时用到 回绕文件,或fseek。
(3)c写文件乱码扩展阅读:
返回实际写入的数据项个数count。
说明:这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
D. 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);
你可以先不改然后把测试文件内容删到只剩下一行,就不会出这个问题
E. C语言中指针读写文件,问什么记事本都是乱码,怎么改呢
从代码看,在Windows平台是有大概率会乱码,假如你的商品信息数组里存放了换行就一定会乱码。
主要问题在文件的打开方式不对,fread, fwrite函数最好以二进制模式打开文件,即打开方式加上b,即(rb, wb)。在unix/Linux系统应该没问题。以下是问题解释:
二进制和文本模式的区别
1.在windows系统中,文本模式下,文件以""代表换行。若以文本模式打开文件,并用fputs等函数写入换行符" "时,函数会自动在" "前面加上" "。即实际写入文件的是"" 。
2.在类Unix/Linux系统中文本模式下,文件以" "代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
(5)c写文件乱码扩展阅读:
ffopen为C语言编程中所需的一个常用语言,多数用来打开文件。其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);其中,‘’文件指针名”必须是被说明为FILE 类型的指针变量,文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
基本介绍函数功能:打开一个文件函数原型:FILE * fopen(const char * path,const char * mode);相关函数:open,fclose,fopen_s,_wfopenfopen所需库:返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
参数说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。