2013-05-08 68 views
1

我正在编写一个搜索文件的程序。这段代码将一个文件夹名称写入一个字符串流中,在它之前加上一个“./”,这样它就可以用来改变目录。然后它更改目录并通知用户更改。stringstream中的随机字符

stringstream maindir; 
maindir << "./" << crntmainfile; 
maindir.str().copy(maindirectory, 260, 0); 
_chdir(maindirectory); 
std::cout << maindirectory; 
std::cout << "Main directory changed: " << maindirectory << "\n"; 

我的问题是maindirectory具有在最后一堆多余的字符。我假设这与260长度的数组有关,它可能包含20个字符,而额外的字符是占用未写入内存的情况。如果这是我的问题,我该如何解决?

编辑: 我确定crntmainfile为空终止,但终止符在写入maindir时会丢失。这是什么造成的? <<是不是将空字符写入字符串流?我如何解决它?

编辑: 我通过执行maindir.put(0);后解决了我的问题maindir << "./" << crntmainfile;手动null终止字符串。

回答

1

std::string::copy不会在复制内容的末尾追加空字符。

你为什么不只是这样做

maindir << "./" << crntmainfile ; 
maindir >> maindirectory; 
maindir.clear(); 
+0

嗯...我改变了 maindir <<“./”<< crntmainfile; 至 maindir <<“./”<< crntmainfile <<“\ 0”; 但它没有奏效。我做错了吗? – FlyingMonkey 2013-05-08 15:41:25

+0

显然我不能在评论中返回。对不起,如果这很难读。 – FlyingMonkey 2013-05-08 15:42:22

+0

如果'crntmainfile'是一个字符串,则额外的空字符是多余的。什么是不工作 – yngccc 2013-05-08 15:44:36

2

std::string::copy没有“\ 0”终止目标,所以你必须这样做你自己。一个可能更好的解决办法是:

std::string mainDirectory(maindir.str()); 
_chdir(mainDirectory.c_str()); 

,而不是使用char[]可言。

+0

我使用的一些函数仅以字符作为参数,所以我有点被卡住了。 – FlyingMonkey 2013-05-08 15:47:51

+0

@FlyingMonkey对于'char const *','mainDirectory.c_str()'是你所需要的。对于'char *',这取决于。如果它是遗留代码,那实际上并不会改变数据,那么'mainDirectory.c_str()'返回值上的'const_cast'是适当的。否则,请确保'string'足够大(使用'resize',_not_'reserve',并传递'&mainDirectory [0]'。 – 2013-05-08 17:19:38