C中的格式说明符行为

时间:2014-01-02 09:04:45

标签: c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
    char test1[10];
    char test2[10];
    sprintf(test1,"%d",20);
    sprintf(test2,"%d",3);
    printf("%d\n",strcmp(test1,test2));

    sprintf(test1,"%2d",20);
    sprintf(test2,"%2d",3);
    printf("%d\n",strcmp(test1,test2)); 
    return EXIT_SUCCESS;
}
OUTPUT:-
-1
 1

我能够理解第一个,因为按字典顺序2小于3但我无法理解第二种情况会发生什么。

2 个答案:

答案 0 :(得分:2)

在第一个例子中,您将其读作'20'和'3' - &gt;所以不相等。

在第二个例子中,您将其视为'20'和'3' - &gt;注意空间。

它不是2 vs 3.它是20 vs 3. %d将读取整个字符串。您可以查看%1d

从strcmp返回

  

返回一个表示其间关系的整数值   strings:零值表示两个字符串相等。一个值   大于零表示第一个字符没有   match在str1中的值大于在str2中的值;并且值小于   零表示相反。

答案 1 :(得分:0)

当您以这种方式指定填充时,您将添加空格作为填充。尝试:

sprintf(test2, "%02d", 3);

如果你想输出“03”。

在第一种情况下,您将“20”与“3”进行比较。不匹配的第一个字符是2和3. 3更大,因此输出为-1。在第二种情况下,不匹配的第一个字符是2和空格。空间为32,小于'2'(ascii 50)。因此输出为1.