字符数组看起来相同但不一样

时间:2013-07-04 18:31:25

标签: c++ arrays

在下面的代码中,虽然字符串是相同的,但我输出为“字符串不同”

逻辑是什么?

#include <iostream>
using namespace std;

 main(void)
{
 char str1[30]="India",str2[30]="India";
 cout<<"str1 address :"<<str1<<endl;
 cout<<"str2 address :"<<str2<<endl;

 if(str1==str2)
    cout<<"strings same"<<endl;
 else

cout<<"strings are different"<<endl;

}

即使使用strcmp(),输出也相同,“字符串不同”。

#include <iostream>
#include <string.h>
using namespace std;

 main(void)
{
 char str1[30]="India",str2[30]="India";
 cout<<"str1 address :"<<str1<<endl;
 cout<<"str2 address :"<<str2<<endl;

 if(strcmp(str1,str2))
    cout<<"strings same"<<endl;
 else
    cout<<"strings are different"<<endl;

}

3 个答案:

答案 0 :(得分:4)

因为你无法比较那样的C字符串。我不确定std::string(您应该使用它,因为这是C ++),但是当您使用字符数组时,您在地址上使用==运算符,而不是相同。使用strcmp比较C字符串。

编辑:正如Beer先生所说,您可以使用==上的std::string运算符,因此请尝试将字符串更改为:

std::string str1 = "India", str2 = "India";

答案 1 :(得分:1)

他们的地址不一样。你正在比较他们的指针。 他们的数据是相同的,你需要像strcmp()。

str1指向第一个数组的第一个字节的地址。 str2指向第二个数组的第一个字节的地址。 仅在某些编译器优化时才相同。(这不是%100可能,在复制/分配操作后可能会失败)

答案 2 :(得分:1)

通过在==中使用if(str1==str2)比较char数组,您要比较两个不同数组的基地址(不相同),您应该使用if(!strcmp(str1, str2))来比较字符串。

阅读:int strcmp ( const char * str1, const char * str2 );

  

returns返回一个表示字符串之间关系的整数值:
    零值表示两个字符串相等     大于零的值表示不匹配的第一个字符在str1中的值大于str2中的值;小于零的值表示相反。