You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用write函数向文件写入整数变量遇问题求助

解决文件写入整数乱码/无法显示的问题

嘿,我来帮你捋捋这个困扰你的问题!

为啥直接写整数会出问题?

你用write()直接写整数变量的时候,它是把整数的二进制原始字节怼进文件里的,不是咱们能看懂的文本字符。举个例子,整数123在内存里是4字节的二进制(比如0x0000007B),文本编辑器打开时会把这些字节当成ASCII码解析,可不就显示乱码或者提示无法显示嘛!

用了sprintf还是不行?大概率是细节没做对

如果转成字符串还是乱码,基本逃不开这两个坑:

  • 没处理好字符串终止符:sprintf()生成的字符串是以\0结尾的,但要是你写入的时候把这个终止符也写进去,或者没算准有效字符的长度,就会出问题;
  • write的长度参数错了:write()需要明确指定写入的字节数,要是你传了sizeof(int)或者sizeof(buf),就会把缓冲区里多余的垃圾内容也写进去,自然就乱码了。

两种靠谱的解决办法

方法1:用文本写入函数(简单省心)

如果只是要写人类能读的整数,直接用fprintf()这种文本模式的函数最省事,不用自己折腾转码:

#include <stdio.h>

int main() {
    int num = 123;
    FILE *fp = fopen("data.txt", "w");
    if (fp != NULL) {
        fprintf(fp, "%d", num); // 直接以文本格式写入整数
        fclose(fp);
    }
    return 0;
}

方法2:sprintf+write的正确打开方式

要是你必须用write()(比如Linux系统调用场景),一定要注意只写入字符串的有效长度:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
    int num = 123;
    char buf[20];
    // 把整数转成字符串,返回的是有效字符的长度(不含终止符\0)
    int str_len = sprintf(buf, "%d", num);
    
    int fd = open("data.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd != -1) {
        write(fd, buf, str_len); // 只写有效字符,别瞎传sizeof(buf)
        close(fd);
    }
    return 0;
}

额外小提示

  • 之前那个无法显示的文件其实是二进制文件,你可以用hexdump data.txt命令查看它的原始字节,就能看到整数的二进制存储形式啦;
  • 创建文件时记得设置合理的权限,比如0644,确保文件能正常被读取。

内容的提问来源于stack exchange,提问作者Anas M K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:25:01