我的类中有一个函数返回一个 vector ,其中包含从 ini 文件中读取的 User 和 Pass。
这是读取它的代码。我在此处添加了用于测试的输出,它正在成功读取它。
vector<char*> Main::GetAccount(int i)
{
vector<char*> LoginInfo;
char szUser[13];
char szPass[13];
char szBuf[3];
_itoa_s(i, szBuf, 10);
GetPrivateProfileString(szBuf, "UserID", "User", szUser, 13, ".\\accounts.ini");
GetPrivateProfileString(szBuf, "Pass", "Pass", szPass, 13, ".\\accounts.ini");
if (strcmp(szUser, "User") == 0)
{
char szBuffer[80];
sprintf_s(szBuffer, "Cannot read account %i.", i);
Log(szBuffer);
exit(EXIT_FAILURE);
}
else
{
LoginInfo.push_back(szUser);
LoginInfo.push_back(szPass);
return LoginInfo;
}
}
这是我调用它的地方,也是它出错的地方。
for (int i = 1; i < main->nBots + 1; i++)
{
vector<char*> LoginInfo = main->GetAccount(i);
char* szUser = LoginInfo[0];
char* szPass = LoginInfo[1];
cout << szUser << endl << szPass << endl;
}
最佳答案
您正在将指针推回到 szUser
和 szPass
进入你的 Vector 然后返回它。这很糟糕,因为 szUser
和 szPass
是局部变量,一旦您从函数返回就会被销毁。
现在
vector<char*> LoginInfo = main->GetAccount(i);
char* szUser = LoginInfo[0];
char* szPass = LoginInfo[1];
在这里您可以访问这些当前指向一些垃圾的指针。这是未定义的行为。你应该重新考虑你想做什么,可能想使用 std::string
而不是处理 char *
的。
将其设为 vector<std::string>
您将获得内部字符串的正确拷贝,而不必担心难看的 char *
指向超出范围的某个位置。
关于c++ - vector 元素输出垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24092559/