比较C中的字符串

时间:2014-04-11 18:48:16

标签: c string

#include <stdio.h>
#include <stdlib.h>

int main()
{
char array1 [50];
char array2 [50];
printf("enter a string:\n");
fgets(array1, 50, stdin);
printf("enter a string2:\n");
fgets(array2, 50, stdin);
if (array1==array2){
    printf("True");
}

}

如果我输入两次相同的字符串,则此代码应为true。但事实并非如此。我该如何解决这个问题?

6 个答案:

答案 0 :(得分:2)

要比较可以使用strcmp的字符串,请在string.h

中定义

array1array2是指向字符串开头的指针。因此,此代码array1==array2比较指针而不是字符串。

答案 1 :(得分:1)

使用strcmp之类的

 if (!strcmp(array1,array2))
    printf("true\n");

请参阅strcmp(3)

您的比较array1 == array2正在比较地址(因此无效)。

答案 2 :(得分:1)

您正在将两个指针与数组的内存位置进行比较。

您可以使用strcmp

if (strcmp(str1,str2) == 0) {
    printf("they match!");
}

或者更详细地说,您需要比较数组中每个条目的值:

int i;
int match = 1;
for (i = 0; i < 50; i++) {
    if (array1[i] != array2[i]) {
        match = 0;
        break;
    }
}
if (match == 1) {
    printf("They match");
} else {
    printf("They do not match");
}

答案 3 :(得分:0)

你在那里比较两个指针。你想要strncmp(array1, array2, 50) == 0

答案 4 :(得分:0)

您应该使用strcmpstrncmp

例如:

int result = strncmp(string1, string2, compareLimit);,其中compareLimit是要比较的字符数。

result会告知您相等0string1是否大于或小于string2

答案 5 :(得分:0)

这取决于你的意思。您想要完全相同的字节序列,还是需要与语言环境相关的比较?

第一个处理strcmp(),第二个处理strcoll()。两者都在<string.h>