0

我有以下代码

#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

4 回答 4

4

如果值字符串设置为 NULL 并且我使用了格式说明符“%S”,那么第一个 printf 什么也没给我。

""是空字符串。"\0"是一个带有额外空字符的空字符串。它不一样NULL。为转换说明符传递空指针s是未定义的行为。

如何在第二个中使用格式说明符 %d 获得相同的结果。

你不能。printf使用%d转换规范打印一个int值;它不能打印任何东西。

于 2012-10-15T19:23:50.500 回答
3

%d总是打印一个整数,因此总是打印一些数字序列。没有NULL整数的概念,所以你不能让它什么都不打印。

顺便说一句,"\0"不是NULL字符串;NULL是。"\0"是,对于所有字符串的目的,等价于"".

于 2012-10-15T19:25:24.773 回答
0

atoi()函数将字符串转换为整数,以便0在第二种情况下打印,因为atoi空字符串 ( "\0") 的 0 和随机字符串(不是数字)的 atoi0也是。

the%d用于显示整数, the%s用于显示字符串

于 2012-10-15T19:27:14.830 回答
0

只需测试它是否为 0 并打印您想要的内容。

{
    int number = 0;
    char dummy[24];
    printf("This is the number: %s\n", (number == 0)? "" : itoa(number, dummy, 10));
}

三元运算符 ( ? :) 应检查数字是否为零,如果为零,则返回一个空字符串并打印。

如果数字不为零,它将itoa 在数字(以 10 为底)上运行(整数到 Ascii),并返回该字符串。

为了itoa工作,它需要一个缓冲区来存储其结果,因此需要dummy变量。

于 2012-10-15T19:25:15.730 回答