Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;,比较两个字符';s_C++_Loops_C++11_While Loop_Char - Fatal编程技术网

C++ C++;,比较两个字符';s

C++ C++;,比较两个字符';s,c++,loops,c++11,while-loop,char,C++,Loops,C++11,While Loop,Char,我有这个: #include <iostream> #include <conio.h> int main () { char str1[] = "abc123"; char str2[] = "abc123"; do { std::cout << "String: "; std::cin >> str2; } while (str1 != str2);

我有这个:

#include <iostream>
#include <conio.h>

int main ()
{
     char str1[] = "abc123";
     char str2[] = "abc123";
     do
     {
          std::cout << "String: ";
          std::cin >> str2;
     } while (str1 != str2);
     std::cout << "str1 is equal to str2, press any key to quit.\n";
     _getch();
     return 0;
}
#包括
#包括
int main()
{
字符str1[]=“abc123”;
字符str2[]=“abc123”;
做
{
std::cout>str2;
}而(str1!=str2);

std::cout您正在比较指针

使用strcmp

此外,使用
cin
是不安全的,因为左侧可能太小

修改为

} while(strcmp(str1, str2))

您正在比较指针

使用strcmp

此外,使用
cin
是不安全的,因为左侧可能太小

修改为

} while(strcmp(str1, str2))

使用
std::string
而不是原始数组和指针,以避免诸如打开缓冲区溢出、比较指针而不是字符串等愚蠢的错误


#包括
#包括
int main()
{
std::string str1=“abc123”;
std::string str2=“abc123”;
做
{
std::cout>str2;
}而(str1!=str2);

std::cout使用
std::string
而不是原始数组和指针,以避免诸如打开缓冲区溢出、比较指针而不是字符串等愚蠢的错误


#包括
#包括
int main()
{
std::string str1=“abc123”;
std::string str2=“abc123”;
做
{
std::cout>str2;
}而(str1!=str2);

std::cout您没有正确地比较两个字符串,而是比较了两个字符数组的地址

您必须使用strcmp功能

while(strcmp(str1,str2)!=0)

或者使用std::string类,该类允许您使用重载运算符==来比较字符串。

如果没有正确比较两个字符串,则是比较两个字符数组的地址

您必须使用strcmp功能

while(strcmp(str1,str2)!=0)

或者使用std::string类,它允许您使用重载运算符==来比较字符串。

str1和str2是字符数组,这实际上意味着它们是指向字符数组的指针。它们的值是常量,并且永远不会相等。将声明替换为:

 string str1 = "abc123";
 string str2 = "abc123";

您将获得更好的结果。(但需要标题)

str1和str2是字符数组,这实际上意味着它们是指向字符数组的指针。它们的值是常量,永远不会相等。请将声明替换为:

 string str1 = "abc123";
 string str2 = "abc123";

分配两个数组时,将在主函数堆栈帧中获得更好的结果。(但需要标题)

这两个阵列得到两个不同的固定地址,永远不会改变

即使数组的内容每次都更改

char str1[] = "abc123";  // str1 gets an unique fixed address  say 1000
char str2[] = "abc123";  // str2 gets an unique fixed address  say 1007
因此语句
while(str1!=str2);
继续比较地址1000和1007以及


因此,循环条件始终为真。

在分配两个数组时,在主函数堆栈帧中:

这两个阵列得到两个不同的固定地址,永远不会改变

即使数组的内容每次都更改

char str1[] = "abc123";  // str1 gets an unique fixed address  say 1000
char str2[] = "abc123";  // str2 gets an unique fixed address  say 1007
因此语句
while(str1!=str2);
继续比较地址1000和1007以及



因此,循环条件始终为真。

因为您正在比较地址。请尝试显示
str1
str2
是什么。+1以对抗无法解释的否决票(也因为我认为绝对没有理由否决此问题)。我也不知道。如果你已经知道答案,大多数问题都会无缘无故地收到否决票,但这并不意味着其他人也应该收到否决票。lol标记为C++11:)的问题中的字符数组会导致你在比较地址。请尝试显示
str1
str2
是什么。+1可抵消无法解释的否决票(也是因为我完全没有理由对这个问题投反对票。)我也没有。如果你已经知道答案并不意味着其他人也应该知道,那么大多数问题都会无缘无故地收到反对票。lol标记为C++11的问题中的字符数组:)当然,由于这个代码看起来更像C,而不是C++,也许其中一个STRCMP答案更适合使用<代码> CIN < /C>和 CUT C++的Simule:当然,因为这个代码看起来更像C而不是C++,也许其中一个STRCMP答案更适合使用< <代码> CIN < /C>和<代码> CUT/<代码> C++的Simple。几乎感觉到C++应该禁止使用字符[]或者char*代表string,使用std::string。你认为Alf先生怎么样?嗯,使用char*会给他一个常量警告。我通常这样做,我现在使用chars还有另一个原因,通常我不会。你忘了在主函数上返回值btw@Koushik:IMHO在C++11中没有真正好的字符串类。不仅仅是接口这很难理解,但无论是
std::string
还是
std::wstring
都不能以可移植的方式很好地用于国际文本。一种解决方案是一种新的基本字符编码类型,它取决于系统以及相应的字符串类。我在Agusut 2013年发行的ACCU Overload J中的一篇文章中概述了必要的类型我还没有完成关于String类……的文章——-):YOP:不,它是由C++标准(从C++ 98和on)保证的。它几乎感觉到C++应该禁止使用char []。或者char*代表string,使用std::string。你认为Alf先生怎么样?嗯,使用char*会给他一个常量警告。我通常这样做,我现在使用chars还有另一个原因,通常我不会。你忘了在主函数上返回值btw@Koushik:IMHO在C++11中没有真正好的字符串类。不仅仅是接口这很难理解,但无论是
std::string
还是
std::wstring
都不能以可移植的方式很好地用于国际文本。一种解决方案是一种新的基本字符编码类型,它取决于系统以及相应的字符串类。我在Agusut 2013年发行的ACCU Overload J中的一篇文章中概述了必要的类型我们的。我还没有完成关于字符串类的文章…;-)@y