%d 如何用于字符串中的“”?结果:4210704

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 是如何组合在一起的。如果您对此有解释,我很乐意回复您)))

Vla*_*cow 6

这个电话

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