1 c printf integer string-literals conversion-specifier
#include <stdio.h>
int main()
{
printf("%c code\n", 'C');
printf("%d", "");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main()
{
printf("%d", 3); /* result 3 */
printf("%d", '3'); /* result 51, because 3 is char (from ASCII table) */
printf("%d", ""); /
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我是 C 语言的初学者。我阅读了 Greg Pery 和 Dean Miller 所著的《C 编程绝对初学者指南》第四版。有 %c %d 和 %f 的示例。我开始对它们进行实验,并注意到我无法解释它是如何制作的。所以我用 %d 尝试了这些例子并理解了前两个是如何工作的。对于最后一个,我知道计算机如何读取它,但我不确定所有 0 和 1 是如何组合在一起的。如果您对此有解释,我很乐意回复您)))
这个电话
printf("%d", "");
Run Code Online (Sandbox Code Playgroud)
有未定义的行为。来自 C 标准(7.21.6.1 fprintf 函数):
9 如果转换规范无效,则行为未定义。288)如果任何参数不是相应转换规范的正确类型,则行为未定义。
如果要输出一个指针(在printf具有数组类型的字符串文字的调用中char[1]隐式转换为指向该类型的第一个元素的指针char *)作为整数,则使用 header<inttypes.h>并写入
#include <inttypes.h>
//...
printf("%" PRIdPTR "\n", ( intptr_t )( void * )"");
Run Code Online (Sandbox Code Playgroud)
或者将字符串文字输出为指针,您可以编写
printf( "%p\n", ( void * )"" );
Run Code Online (Sandbox Code Playgroud)
这是一个演示程序。
#include <stdio.h>
#include <inttypes.h>
int main( void )
{
printf( "%08" PRIXPTR "\n", ( uintptr_t )( void * )"" );
printf( "%p\n", ( void * )"" );
}
Run Code Online (Sandbox Code Playgroud)
它的输出可能看起来像
00F19B38
00F19B38
Run Code Online (Sandbox Code Playgroud)
使用宏PRIXPTR而不是将指针输出为十六进制表示形式的整数,与使用指针PRIdPTR转换说明符的情况相同。p