我正在编写一个搜索文件的程序。此代码块将文件夹名称写入字符串流,在其前面加上“./”,以便可以使用它来更改目录。然后它会更改目录并通知用户更改。
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;
以手动空终止字符串来解决我的问题。
答案 0 :(得分:2)
std::string::copy
没有&#39; \ 0&#39;终止目标,所以你必须自己做。一个可能更好的解决方案是:
std::string mainDirectory( maindir.str() );
_chdir( mainDirectory.c_str() );
,根本不使用char[]
。
答案 1 :(得分:1)
std::string::copy
不会在复制内容的末尾附加空字符。
你为什么不这样做
maindir << "./" << crntmainfile ;
maindir >> maindirectory;
maindir.clear();