为什么当我使用ascii表中的空字符时printf会打印一个空格而不是停止?这就是我的意思:

printf("Hello%c, world", 0); //Hello , world
printf("Hello%c, world", '\0'); //Hello , world

只有当我将转义字符放在字符串中时printf才会停止字符串:
printf("Hello\0, world"); //Hello

我在windows 8、windows 10(使用cygwin、mingw、netbeans、code::blocks)、xubuntu上都试过了,都一样。
问题在哪里?我问了我的一个朋友,但他说他没有这个问题,三个例子的执行方式都一样。

最佳答案

printf("Hello\0, world");将其参数用作c字符串,以便对其进行解码,直到找到一个nul字符,因此它在\0之后停止,忽略后面的内容。
printf("Hello%c, world", 0);解码它的参数(直到它在其中找到一个nul字符,即在d之后),同时它找到一个%c,因此它用作为参数给定的字符(其ascii代码为nul)替换它,然后发送给终端一个nul字符,然后继续。
printf手册上说:
这些函数在格式字符串的控制下写入输出
指定后续参数[…]如何转换为
输出。

关于c - 通过`printf`中的格式说明符传递空字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33279071/

10-16 11:29