gpt4 book ai didi

c++ - 与字符串文字的比较导致未指定的行为?

转载 作者:可可西里 更新时间:2023-11-01 15:38:35 26 4
gpt4 key购买 nike

我尝试编写的程序有问题。它只是一个 Windows 控制台程序,我对 C++ 还很陌生。这只是我的第 4 个程序。

我遇到的问题是,当我运行我的程序时,我没有出现任何错误,但在我将在下面突出显示的行中出现了很多警告,指出“与字符串文字进行比较会导致未指定的行为”。

当程序运行而不是添加我想要的数字时,无论我输入什么,它只会给我一个随机的大数字。

代码如下:

#include <iostream>

using namespace std;

int main()
{
int hold;
int i;
int n;
i = 6;
int result;
int * price;
char items[100][100];

if (items == 0)
cout << "No items can be stored";
else
{
for (n=0; n<i; n++)
{
cout << "Item#" << n << ": ";
cin >> items[n];
}
cout << "\nYou Entered: \n";
for (n=0; n<i; n++)
cout << items[n] << ", ";

}
for (n=0; n<i; n++)
{
if (items[n] == "ab"){
price[n] = 2650;
}

else if (items[n] == "ae"){
price[n] = 1925;
}

else if (items[n] == "ie"){
price[n] = 3850;
}

else if (items[n] == "bt"){
price[n] = 3000;
}

else if (items[n] == "pd"){
price[n] = 2850;
}

else if (items[n] == "ga"){
price[n] = 2600;
}

}

for (n=0; n<i; n++)
{
result = result + price[n];
}

cout << "\nTotal gold for this build: " << result;
cin >> hold;
return 0;
}

感谢任何帮助。我可能做错了什么大事。 if 语句中的名称目前都是占位符,当我可以让它与它需要工作的裸 6 一起工作时,我将添加更多的 if 语句。

最佳答案

在 C++ 中,== 仅在内部为原始类型实现,而数组不是原始类型,因此比较 char[100] 和字符串文字只会将它们作为 2 进行比较char* 或更确切地说是 2 个指针,因为这 2 个指针不相等,所以 items[n] == "ae" 永远不可能为真,而不是您应该使用 std::string 将字符串保存为:

std::string items[100];
// initialize items
if( items[n] == "ae" ) ...

或者你应该使用 strcmp 来比较字符串,但记住 strcmp 返回 0 相等的字符串,所以你的代码将是:

char items[100][100];
// initialize items
if( strcmp(items[n], "ae") == 0 ) ...

还有一个额外的注意事项是 if (items == 0) 是无用的,因为 items 分配在堆栈上而不是堆中!

关于c++ - 与字符串文字的比较导致未指定的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12868143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com