寻找澄清使用"zd"与printf().
当然,以下对于C99及更高版本是正确的.
void print_size(size_t sz) {
printf("%zu\n", sz);
}
Run Code Online (Sandbox Code Playgroud)
C规范似乎允许printf("%zd\n", sz)取决于它的读取方式:
7.21.6.1 fprintf功能
z用于指定后续的d,i,o,u,x,或X转换说明适用于size_t或相应的符号整型参数; 或者以下n转换说明符适用于指向与size_t参数对应的有符号整数类型的指针.C11dr§7.21.6.17
这应该是作为
z指定以下d...转换说明符适用于size_t或相应的有符号整数类型参数..."(两种类型)和" z指定以下u...转换说明符适用于size_t或相应的有符号整数类型参数. .."(两种类型)要么
z指定以下d...转换说明符适用于相应的有符号整数类型参数..."(仅限带符号类型)和" z指定以下u...转换说明符适用于size_t"(仅限无符号类型).我一直在使用#2定义,但现在不太确定.
哪个是正确的,1,2或其他什么?
如果#2是正确的,那么可以使用
"%zd"哪种类型的示例是什么?
为什么以下代码的输出是这样的?
char str[] = {'i', 't', 'i', 's', 'm', 'e', '\0'}; //this code equates to 7 bytes
char* str[] = {'i', 't', 'i', 's', 'm', 'e', '\0'}; //this code equates to 28 bytes
Run Code Online (Sandbox Code Playgroud)