我有以下代码
#include<stdio.h>
#include<string.h>
int main (void)
{
unsigned int pqr = 201;
unsigned int def = 113;
printf("The values are,%u,%s,%s,%u\n", pqr,"\0","\0",def);
printf("The values are,%u,%d,%d,%u\n", pqr,atoi("\0"),atoi("\0"),def);
}
值为,201 ,,, 113 值为201,0,0,113
如果值字符串设置为NULL并且我使用格式说明符“%S”,则第一个printf不提供任何内容。如何在第二个中使用格式说明符%d来获得相同的结果。目前它给出“0”而不是什么。
答案 0 :(得分:4)
如果值字符串设置为NULL并且我使用格式说明符“%S”,则第一个printf没有给我任何内容。
""
是空字符串。 "\0"
是一个空字符串,带有一个额外的空字符。它与NULL
不同。传递s
转换说明符的空指针是未定义的行为。
如何在第二个中使用格式说明符%d来获得相同的结果。
你做不到。带有printf
转化规范的%d
会打印int
值;它不能打印任何东西。
答案 1 :(得分:3)
%d
始终打印一个整数,因此始终打印一些数字序列。没有NULL
整数的概念,因此你无法打印任何内容。
顺便说一句,"\0"
不是NULL
字符串; NULL
是。出于所有字符串目的,"\0"
等同于""
。
答案 2 :(得分:0)
只要测试它是否为0并打印出你想要的内容。
{
int number = 0;
char dummy[24];
printf("This is the number: %s\n", (number == 0)? "" : itoa(number, dummy, 10));
}
三元运算符(? :
)应该检查数字是否为零,如果是,则返回一个打印的空字符串。
如果数字不为零,它将在数字(基数10)上运行itoa
(整数到Ascii),并返回该字符串。
要使itoa
起作用,它需要一个缓冲区来存储其结果,因此需要dummy
变量。
答案 3 :(得分:0)
atoi()
函数将字符串转换为整数,以便在第二种情况下打印0
,因为空字符串atoi
为"\0"
为{0}且随机字符串的atoi(不是数字)也是0
。
%d
用于显示整数,%s
用于显示字符串