2014-03-01 45 views
2

我有此代码段,目的是获取系统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 64位,编译使用MinGW的(G ++ 4.8)]

+0

这是* waaaaay *太漂亮是 “腐败”! – user2864740

回答

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); 
+0

谢谢,这两个选项的作品。 – Amani

+0

只是一个挑剔。他试图追加的字符串(或者说char *)不是以null结尾的。 –

相关问题