在下面的代码中,我使用strcmp比较两个字符串,并将此比较作为if语句的条件。
使用下面的代码,输出将是hello world
,因为字符串"一个"等于字符串"两个"。
#include <stdio.h>
#include <string.h>
char one[4] = "abc";
char two[4] = "abc";
int main() {
if (strcmp(one, two) == 0) {
printf("hello world\n");
}
}
现在我想更改程序,如果两个字符串不同,则打印hello world
,所以我改变程序:
#include <stdio.h>
#include <string.h>
char one[4] = "abc";
char two[4] = "xyz";
int main() {
if (strcmp(one, two) == 1) {
printf("hello world\n");
}
}
我不明白为什么它不打印任何东西。
答案 0 :(得分:6)
因为在这种情况下strcmp()
将返回负整数。
所以改变这个:
if (strcmp(one, two) == 1) {
到此:
if (strcmp(one, two) != 0) {
考虑字符串不同的所有情况。
请注意,您可以通过阅读ref或打印函数返回的内容来发现自己,如下所示:
printf("%d\n", strcmp(one, two));
// prints -23
答案 1 :(得分:2)
你误解了strcmp
是如何运作的。要测试字符串是否不同,请使用
if(strcmp(one, two))
答案 2 :(得分:2)
strcmp 返回零,当它们不同时返回零以外的值,因此您需要将代码中的if更改为此类
if ( strcmp(one, two) != 0 ) {
printf("hello world\n");
}
答案 3 :(得分:2)
根据C标准(7.23.4.2 strcmp函数)
3 strcmp函数返回大于,等于或的整数 小于零,因此s1指向的字符串更大 比,等于或小于s2指向的字符串。
所以你需要的是编写if语句,如
if ( strcmp(one, two) != 0 ) {
或
if ( !( strcmp(one, two) == 0 ) ) {
答案 4 :(得分:1)
正确的行为是:
if (strcmp(one, two) != 0) {
printf("hello world\n");
}
实际上,此函数返回两个字符串之间的差异: