如何使用整数打印NULL字符串

时间:2012-10-15 19:22:12

标签: c printf

我有以下代码

#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”而不是什么。

4 个答案:

答案 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用于显示字符串