我最终尝试创建一个视频游戏,并在C ++中遇到了此问题,在该问题中更改了错误的数组。这是出问题的代码:

 #include "stdafx.h"
 #include <iostream>
 #include <string>

 using namespace std;

 string commonNames[] = {""};
 string xCommonNames[] = {""};

 int commonIndex = 0;
 int xCommonIndex = 0;

 void placeName(string name, string placement)
 {
if(placement == "common"){
    commonNames[commonIndex] = name;
    commonIndex++;
}
else if(placement == "xCommon"){
    xCommonNames[xCommonIndex] = name;
    xCommonIndex++;
}

 }

 int _tmain(int argc, _TCHAR* argv[])
 {

placeName("Nathan","common");
placeName("Alex","xCommon");
placeName("Alyssa","common");


cout << commonNames[0] << endl;
cout << commonNames[1] << endl;
cout << xCommonNames[0] << endl;

system("pause");
return 0;
 }


我将其作为输出:

 Nathan
 Alyssa
 Alyssa


某些不正确的结果应该是:

 Nathan
 Alyssa
 Alex


在游戏中,存在传奇和xLegendary之类的不同类型,它们具有相同的问题。我什至检查了他们是否有相同的地址,但没有。我究竟做错了什么?

最佳答案

这是一个大小为1的数组:

string commonNames[] = {""};


然后,您就可以像访问多个元素一样访问它。越界访问是不确定的行为。您可能需要查看std::vector<std::string>。例如

std::vector<std::string> commonNames;
std::vector<std::string> xCommonNames;

void placeName(const std::string& name, const std::string& placement)
{
  if(placement == "common"){
    commonNames.push_back(name)
  }
  else if(placement == "xCommon"){
    xCommonNames.push_back(name);
  }

}

10-01 10:59
查看更多