我有这段代码片段,目的是获取系统PATH变量中的路径列表并将它们打印在CMD控制台上;
#include <iostream>
#include <string>
#include <list>
#include <cstdlib>
using namespace std;
int main()
{
string path = getenv("PATH");
string tempo = "";
list<string> pathList;
for(size_t n = 0; n < path.size(); n++)
{
char delimiter = ';';
if(path.at(n) == delimiter)
{
if(!tempo.empty())
{
pathList.push_back(tempo);
}
tempo.clear();
}
else{
char aChar = path.at(n);
tempo.append(&aChar);
}
}
list<string>::iterator listIter;
for(listIter = pathList.begin(); listIter != pathList.end(); listIter++)
{
cout << *listIter << endl;
}
return 0;
}
每次我在CMD控制台上编译和运行时,我都会得到类似于此的输出行;
C►■":►■"\►■"P►■"y►■"t►■"h►■"o►■"n►■"2►■"6►■"\►■"S►■"c►■"r►■"i►■"p►■"t►■"s►■"
是否存在内存损坏?我到底错过了什么? 在Windows 7 64bit上,使用MinGW(g ++ 4.8)编译
答案 0 :(得分:3)
仔细研究以下两个陈述:
char aChar = path.at(n);
tempo.append(&aChar);
显然,您正尝试将char
附加到std::string
。但是,您实际上是将NUL终止的字符串附加到tempo
。
将代码替换为:
char aChar = path.at(n);
tempo += aChar;
或:
char aChar = path.at(n);
tempo.push_back(aChar);