我读过this post。但当我尝试的时候:
printf("before null %c after null\n", 0); // (ASCII=0) != '\0' ??
而不是得到:
before null
我得到了:
before null after null
所以我的问题是:ASCII值0实际上等于'\0‘吗?
发布于 2018-06-09 14:57:34
当给定值0
或'\0'
时,printf
不会在%c
格式说明符的该字符位置终止printf格式字符串。相反,nul
的终端输出通常是占位符(例如,space
等)
但是,您可以将格式插入到字符串中,然后使用%s
格式说明符输出字符串,可以看到实际上十进制0实际上是等效ASCII字符'\0'
的ASCII值,并且将在nul字符处终止字符串(参见:www.ASCIItable.com),例如
#include <stdio.h>
#define FMT "before null %c after null\n"
int main (void) {
char buf[sizeof FMT * 2];
puts (FMT);
sprintf (buf, FMT, 0);
printf ("using 0 : '%s'", buf);
putchar ('\n');
sprintf (buf, FMT, '\0');
printf ("using \\0: '%s'", buf);
putchar ('\n');
return 0;
}
示例使用/输出
$ ./bin/str_printf_null
before null %c after null
using 0 : 'before null '
using \0: 'before null '
https://stackoverflow.com/questions/50771351
复制相似问题