向量元素输出垃圾
Vector element outputting garbage
在我的类中有一个函数,它返回一个从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++
- 在 C++ 中输出枚举类类型的向量元素
- 访问要输出的矢量迭代器元素
- C++ 输出数组中的最高元素
- 我的程序只输出 1 的最高元素
- 为什么我的数组输出一个不在其中的元素
- 获取C++输出流中元素的大小
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 为什么 std::accumulate 生成705032704作为输出,而不是向量中元素的总和?
- 在C++中实现二叉搜索树,搜索不起作用.尝试打印节点的元素会导致输出崩溃
- 如何在C 中输出集合的最后一个元素
- 可视化地将数组的所有元素输出到 C++ 中的文件中
- 如何使用 for 循环将元素加载到我的每个数组中,然后将每个数组的总和输出到一个 sum 数组中
- 整数数组元素,前导 0 表示垃圾输出
- 我已经编写了一个代码来查找数组元素的反向,但它没有给出所需的输出
- 如何让我的代码从矩阵输出非零元素
- C 链接列表仅输出其他每个元素
- 输入元素与文件C 的输出元素不同
- 在队列中,插入和删除后,被删除的元素也会出现在输出中.为什么
- 如何按升序使用键在unordered_map中输出元素