当前位置:首页 » 编程语言 » c语言文件写入的是乱码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言文件写入的是乱码

发布时间: 2022-05-25 17:02:33

c语言写入文件为什么会出现乱码的现象

写入数据用 fprintf(fp,"%s %s %d 。。。这种方式。不是 fscanf(), 另,注意写出时的格式里要有分隔符空格,否则下次读文件时,字符串,数字混在一起无法读。
允许同时“读写”的文件,要注意读写位置的控制,必要时用到 回绕文件,或fseek。

② C语言中指针读写文件,问什么记事本都是乱码,怎么改呢

从代码看,在Windows平台是有大概率会乱码,假如你的商品信息数组里存放了换行就一定会乱码。

主要问题在文件的打开方式不对,fread, fwrite函数最好以二进制模式打开文件,即打开方式加上b,即(rb, wb)。在unix/Linux系统应该没问题。以下是问题解释:

二进制和文本模式的区别

1.在windows系统中,文本模式下,文件以""代表换行。若以文本模式打开文件,并用fputs等函数写入换行符" "时,函数会自动在" "前面加上" "。即实际写入文件的是"" 。

2.在类Unix/Linux系统中文本模式下,文件以" "代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。

(2)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+ 读写打开一个二进制文件,允许读或在文件末追加数据。

③ c语言写出文件是乱码

fprintf调用的不对.

另外,你用fprintf写, 就该用fscanf读取 而不是fread

以下供参考.

voidsave_file(STUDENTSstu[],intsum)
{intc=0;
FILE*fp=fopen("图书管理.txt","w");
fprintf(fp,"%d%s%s%s%f%d ",stu[k].num,stu[k].name,stu[k].press,stu[k].price,stu[k].shuliang);
fclose(fp);
}
intread_file(STUDENTSstu[])
{FILE*fp;
inti=0;
if((fp=fopen("stu.txt","r"))==NULL)
{printf(" —————库存文件不存在!请创");
return0;
}
while(feof(fp)!=1)
{
fscanf(fp,"%d%s%s%s%f%d",&stu[i].num,stu[i].name,stu[i].press,&stu[i].price,&stu[i].shuliang);
if(stu[i].num==0)
break;
else
i++;
}
fclose(fp);
returni;
}

另外, 写文件的时候k是什么? 正常来说应该是循环写入整个数组的. 这部分可能还有问题.

④ C语言fwrite写入文件后为什么出现乱码

这个函数以二进制形式对文件进行操作。

按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为乱码。例如float a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。

写入数据用fprintf(fp,"%s %s %d 这种方式。不是 fscanf(), 另,注意写出时的格式里要有分隔符空格,否则下次读文件时shu,字符串,数字混在一起无法读。允许同时“读写”的文件,要注意读写位置的控制,必要时用到 回绕文件,或fseek。

(4)c语言文件写入的是乱码扩展阅读:

返回实际写入的数据项个数count。

说明:这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。

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

第一个程序:
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;
}

⑥ C语言写文件乱码 求解

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

⑦ C语言中写文件,为什么写出的是乱码呢,求大

fp=fopen("stud.dat","wb"); //你建立的是二进制文件,这种文件用记事本打开就是乱码,这是正常的。

⑧ 急!C语言编程~写入文件的数据变成乱码是怎么回事

结构体类型写入文件,那么保存的必然是二进制数据,直接看文件肯定是乱码的。如果想文件内容是直接可看的,那么不要直接存储结构体,应该自己设计这个文件的文本格式,按文本方式存储数据。