C - strcmp与if语句相关

时间:2017-03-27 21:34:12

标签: c string function if-statement strcmp

在下面的代码中,我使用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");
    }
}

我不明白为什么它不打印任何东西。

5 个答案:

答案 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");
}

实际上,此函数返回两个字符串之间的差异

  • &LT; 0:不匹配的第一个字符在ptr1中的值低于在ptr2中的值。
  • 0:两个字符串的内容相等
  • &GT; 0:不匹配的第一个字符在ptr1中的值大于在ptr2中的值。

This is an example of how strcmp could be implemented