账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    C fwrite 写入二进制文件问题
    36
    0
    c 经验太少,请教// size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );void fw(){ // char *demo = "out.txt"; char *demo = "out"; FILE *f = fopen(demo,"wb+"); fwrite(demo,1,/*3*/10,f); fclose(f);}void fr(){ // char *demo = "out.txt"; char *demo = "out"; FILE *f = fopen(demo,"rb+"); char ctx[10]; int numread = fread(ctx,1,/*3*/10,f); printf("%d",numread); printf("%s",ctx); fclose(f);}上面两个函数中 fw 在向二进制文件 out 写入 out 字符串,( 注意: 在这里我故意将 fwrite 的 count 写大了,原本应是 3 我改成了 10)使用 cat out 得到函数 fw 写入的二进制文件的内容为:outrb+%s%函数 fw 写入的二进制文件的大小( stat out 得到): 文件:out 大小:10 块:8 IO 块:4096 普通文件设备:802h/2050d Inode:804906 硬链接:1权限:(0644/-rw-r--r--) Uid:( 1000/wingdust) Gid:( 1000/wingdust)最近访问:2021-11-01 15:44:58.789548880 +0800最近更改:2021-11-01 15:44:58.306210867 +0800最近改动:2021-11-01 15:44:58.306210867 +0800创建时间:2021-11-01 15:44:58.306210867 +0800想问这个 rb+%s% 是什么?而在后面运行函数 fr 输出为( 注意: 在这里我故意将 fread 的 count 写大了,原本应是 3 我改成了 10)10out% 这个输出10可以看出还是读取到了第10个字节 内容却是 out%而不是与 cat out 的输出不同,是为什么上面的运行编译均在 linux gcc
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 月下清风错 普通会员 1楼

      fwrite函数在C中用于向文件中写入二进制数据。但是,如果你在使用fwrite函数时遇到了问题,比如写入的二进制数据格式错误或者写入失败,那么可能是由于以下几个原因造成的:

      1. 二进制数据的长度超过了fwrite函数的参数大小:在fwrite函数中,你可以指定要写入的二进制数据的长度。但是,如果你的二进制数据超过了这个长度,那么fwrite函数就会抛出一个异常。你需要确保你的二进制数据的长度不会超过fwrite函数的参数大小。

      2. 文件的权限问题:在C中,如果你没有写入文件的权限,那么fwrite函数就无法写入文件。你需要在写入文件之前,先取得文件的权限。

      3. 写入失败:fwrite函数可能会遇到一些不可预见的情况,比如文件不存在、文件已存在或者写入操作超出了文件的大小等。在这种情况下,fwrite函数可能会抛出一个异常,你需要检查这些异常,并处理它们。

      如果你在使用fwrite函数时遇到问题,那么你可以尝试以下几种方法来解决问题:

      1. 检查二进制数据的长度:确保你的二进制数据的长度不会超过fwrite函数的参数大小。

      2. 检查文件的权限:在写入文件之前,先取得文件的权限。

      3. 检查写入失败:检查fwrite函数抛出的异常,并处理它们。

      如果你仍然无法解决问题,那么你可能需要寻求专业的帮助,比如查看相关的文档或者寻求专业人士的帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部