【发布时间】:2020-06-03 23:18:44
【问题描述】:
请注意,我已经检查了与此标题相关的问题,但从我的角度来看,它们与此问题无关。
最初我认为 program1 和 program2 会给我相同的结果。
//Program 1
char *a = "abcd";
char *b = "efgh";
printf("%d", strcmp(a,b));
//Output: -4
//Program 2
printf("%d", strcmp("abcd", "efgh"));
//Output: -1
我能发现的唯一区别是在 program2 中我传递了字符串文字,而在程序中我传递了 char * 作为 strcmp() 函数的参数。
为什么这些看似相同的程序的行为会有所不同?
平台:Linux mint 编译器:g++
编辑:实际上program1总是打印第一个不匹配字符的ascii码的差异,但是如果string2中第一个不匹配字符的ascii码大于string1的ascii码,program2打印-1,反之亦然.
【问题讨论】:
-
strcmp返回一个 0 的值。除 0 外未指定实际值。 -
他们都是正确的。其余的无关紧要。 [但如果你真的想知道:检查汇编输出]
-
@AjayMishra 的行为并不模棱两可。它返回一个 negative 值,这就是规范所说的应该做的。
-
没有任何含糊之处。标准唯一保证的是返回值将小于、等于或大于 0。没有人关心某些特定示例的确切值。它们是不相关的,你不能假设 -4 或 -1 更“正确”来编写代码。
-
这不是模棱两可的,它是无可争议的