c语言fwrite写文件失败

2024年11月14日 13:06
有5个网友回答
网友(1):

FILE *fp;
fp=fopen("绝对路径","w");
if(fp==NULL)
{
perror("fopen");
}
fwrite(,,,fp);
如果出错,请先看报错时fopen出现的信息,是不是不存在文件或段的意思

网友(2):

fwrite 操作后会把文件指针位置 向后 移动size*count字节。接着再fwrite就从这个当前位置起写。

while循环里,例如读1个结构,写一个结构,一直到读到 文件结束符 EOF为止。

这种写法有没有必要看情况决定。例如,一个结构就是一个学生的成绩单,但一开始并不知道文件里一共有多少学生,那么用这种循环读的方法,就可以计数,可以动态分配单元。
计数器初始化为0。成功读入1个结构,就把计数器加1。直到fread()失败--返回EOF。

int c=fread(xxx, 10,10, fp), c有没有可能<100但是>0。 有可能。所以可以 通过 c 是否等于 100
来判断 是否成功,是否合理, 并采取措施。
例如,有一个题目,是读入1个文件,平均地拆成3个文件输出,再读入这3个文件,合成1个文件。
因为文件的字节总数,未必是3 的倍数,所以 想读的个数和真正读到的个数就有可能不同。要使拆开的文件再合起来,与原文件一模一样,就要用到c。

网友(3):

描述 清楚一些,文件是否存在 文件打开是否正确 是否有写权限

网友(4):

strerr和errorno结合,可以查出原因

网友(5):

这个程序原则意义上是没有问题的,可能存在的错误有以下几点:
一、欲读取的文件没有那么多数据,也就是说你想要读取的文件没有大到0x210000有数据,所以导致不能成功。
二、采用rb+的方式写入文件(以更新方式打开(读写))。这个也是没有问题的。但是要求以此种方式打开的文件必须存在,也就是说你必须在运行这个程序之前把这个文件建好。
三、采用上述的方式写入到0x210000位置时,如果文件的是空的,那么程序会在文件的0x210000地址之前填充0.
所有可能的问题就上述这些,我自己运行过这个程序,在解决好上面的问题之后,程序没有出错,因此,可以尝试把这个地址调小一点。