#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但我无法理解第二种情况会发生什么。
答案 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.