快速的回答是,该字符'0'
在二进制数据中由 ASCII 数字 48 表示。这意味着,当您需要字符'0'
时,文件中实际上包含以下位:00110000
. 类似地,可打印字符'1'
的十进制值为 49,并由 byte 表示00110001
。('A'
为 65,表示为01000001
,而'a'
为 97,表示为01100001
。)
如果您希望字符串末尾的空终止符 ,'\0'
实际上具有 0 十进制值,因此将是一个全为零的字节:00000000
. 这确实是一个 0 值。对于编译器来说,两者没有区别
memset(buffer, 0, sizeof buffer);
和
memset(buffer, '\0', sizeof buffer);
对我们来说,唯一的区别是语义上的区别。 '\0'
告诉我们我们正在处理一个字符,而 0 只是告诉我们我们正在处理一个数字。
查看ascii 表会极大地帮助您。
fprintf
使用 ASCII 输出数据并输出字符串。 fwrite
写入纯二进制数据。如果你fprintf(fp, "0")
,它会将值 48 放入 fp,而如果你fwrite(fd, 0)
将实际值 0 放入文件中。(注意,我对fprintf
andfwrite
的使用显然不是正确的用法,但说明了这一点。)
注意:我的回答是指 ASCII,因为它是最古老、最著名的字符集之一,但正如 Eric Postpichil 在评论中提到的那样,C 标准不受 ASCII 约束。(事实上,虽然它偶尔会给出使用 ASCII 的示例,但该标准似乎特意从不假设 ASCII 将是所使用的字符集。)。 fprintf
使用已编译程序的执行字符集输出。