打印到控制台时,字符之间会出现额外符号

时间:2014-03-01 09:39:27

标签: c++

我有这段代码片段,目的是获取系统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)编译

1 个答案:

答案 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);