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

为何使用fwrite无法向文件写入"\0"?C语言技术求助

关于fwrite写入'\0'看不到内容的问题

嘿,我来帮你捋清楚这个问题~

首先得明确:你的fwrite其实已经成功把两个'\0'字符写入文件了,只是你用普通文本编辑器打开时看不到它们而已。原因主要有这几点:

  • '\0'是不可打印的控制字符:在ASCII编码里,'\0'(空字符,ASCII值为0)属于非打印字符,大多数文本编辑器会把这类字符显示为空白、占位符,或者直接不显示它们的存在,但它们确实实实在在保存在文件里。你可以用二进制文件查看工具打开abc.txt,就能看到两个0x00的字节了。

  • 你的代码实际写入的是两个'\0':C语言里,字符串字面量"\0"会被编译器处理成一个字符数组——第一个元素是你显式写的'\0',第二个元素是字符串自动追加的结束符'\0',所以fwrite("\0", 2, 1, fp)实际上是向文件写入了两个连续的空字符。

而你写入"ab"能正常显示,是因为'a'和'b'都是可打印的ASCII字符,编辑器可以直接渲染出它们的字形。

另外,建议你可以通过fwrite的返回值来验证写入是否成功,比如:

FILE *fp = fopen("abc.txt", "w+");
if (fp == NULL) {
    perror("Failed to open file");
    return 1;
}
size_t written = fwrite("\0", 2, 1, fp);
if (written != 1) {
    printf("Write failed, only wrote %zu elements\n", written);
}
fclose(fp);

如果返回值是1,就说明确实成功写入了1个大小为2字节的元素(也就是两个'\0')。

内容的提问来源于stack exchange,提问作者Junrui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:43:27