在 C 的入门课程中,我了解到,在存储字符串时,存储的字符串\0末尾带有空字符。但是,如果我想打印一个字符串,尽管printf("hello")我发现它不\0以以下语句结尾,该怎么办
printf("%d", printf("hello"));
Output: 5
Run Code Online (Sandbox Code Playgroud)
但这似乎不一致,据我所知,像字符串这样的变量存储在主内存中,我猜在打印某些内容时它也可能存储在主内存中,那么为什么会有区别呢?
请注意,我已经检查了与此标题相关的问题,但从我的角度来看,它们与此问题无关。
最初我认为 program1 和 program2 会给我相同的结果。
//Program 1
char *a = "abcd";
char *b = "efgh";
printf("%d", strcmp(a,b));
//Output: -4
Run Code Online (Sandbox Code Playgroud)
//Program 2
printf("%d", strcmp("abcd", "efgh"));
//Output: -1
Run Code Online (Sandbox Code Playgroud)
我能发现的唯一区别是在程序 2 中我传递了字符串文字,而在程序中我char *作为strcmp()函数的参数传递。
为什么这些看似相同的程序的行为之间存在差异?
平台:Linux mint 编译器:g++
编辑:实际上程序1总是打印第一个不匹配字符的ascii代码的差异,但是如果string2中第一个不匹配字符的ascii代码大于string1的ascii代码,则程序2打印-1,反之亦然。