小编u_s*_*sre的帖子

C 中的 '\0' 和 printf()

在 C 的入门课程中,我了解到,在存储字符串时,存储的字符串\0末尾带有空字符。但是,如果我想打印一个字符串,尽管printf("hello")我发现它不\0以以下语句结尾,该怎么办

printf("%d", printf("hello"));

Output: 5
Run Code Online (Sandbox Code Playgroud)

但这似乎不一致,据我所知,像字符串这样的变量存储在主内存中,我猜在打印某些内容时它也可能存储在主内存中,那么为什么会有区别呢?

c printf stdout c-strings

21
推荐指数
5
解决办法
1983
查看次数

strcmp() 的歧义行为

请注意,我已经检查了与此标题相关的问题,但从我的角度来看,它们与此问题无关。

最初我认为 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,反之亦然。

c string strcmp

3
推荐指数
1
解决办法
125
查看次数

标签 统计

c ×2

c-strings ×1

printf ×1

stdout ×1

strcmp ×1

string ×1