c fwrite(c语言fwrite写文件失败)

本文目录
c语言fwrite写文件失败
FILE *fp;
fp=fopen("绝对路径","w");
if(fp==NULL)
{
perror("fopen");
}
fwrite(,,,fp);
如果出错,请先看报错时fopen出现的信息,是不是不存在文件或段的意思
C语言用fwrite写入问题
#include《stdio.h》
#include《string.h》
void aaa();
struct student
{
char name; //姓名
int age; //年龄
int num; //学号
char addr; //地址
}stu;
void main()
{
int i;
printf("请输入4个学生姓名、年龄、学号、地址,按回车!\n");
for(i=0;i《4;i++)
{
scanf("%s%d%d%s",stu.addr);
}
aaa();
}
#define MAX_BUF 1000
void aaa()
{
FILE *fp;
int i;
char outbuf;
char tempbuf;
memset(outbuf,0,MAX_BUF);
if((fp=fopen("123.txt","w"))==NULL)
{
printf("无法打开文件!\n");
return;
}
strcpy(outbuf,"姓名 年龄 学号 地址");
for(i=0;i《4;i++)
{
sprintf(tempbuf,"\n%s %d %d %s",stu.addr);
strcat(outbuf,tempbuf);
}
if(fwrite(outbuf,strlen(outbuf),1,fp)!=1)
{
printf("写入错误!\n");
}
fclose(fp);
}
你的问题在于你要输出一个文本,但是你却没有进行文本,直接把数据结构中的数据输出,这样是二进制的,不是文本的。
关于c语言fwrite函数的问题
if(fwrite(&stu,sizeof(struct student),1,fp)!=1)
这一步已经不对了
用的是size
应该是
if(fwrite(&stu,sizeof(struct student),1,fp)!=1)
C中的fwrite函数
fwrite是C语言函数,指向文件写入一个数据块。
用法:
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite 函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
程序示例:
示例一:
#include 《stdio.h》
struct mystruct
{
int i;
char cha;
};
int main(void)
{
FILE *stream;
struct mystruct s;
if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
s.i = 0;
s.cha = ’A’;
fwrite(&s, sizeof(s), 1, stream); /* 写的struct文件*/
fclose(stream); /*关闭文件*/
return 0;
}
示例二:
#include《stdio.h》
#define SIZE 1
typedef struct
{
char name;
int num;
int age;
char addr;
}student;
student stu;
void save()
{
FILE *fp;
int i;
if((fp=fopen("dat.txt","w"))==NULL)
{
printf("无法打开此文件!\n");
return;
}
for(i=0;i《SIZE;i++)
if(fwrite(&stu, sizeof(student), 1, fp) != 1)
printf("文件写入错误。!\n");
fclose(fp);
}
void main()
{
int i;
for(i=0;i《SIZE;i++)
scanf("%s%d%d%s",&stu.addr);
save();
}

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10




