1

我正在编写一个搜索文件的程序。此代码块将文件夹名称写入字符串流,在其前面加上“./”,以便可以使用它来更改目录。然后它会更改目录并将更改通知用户。

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;

4

2 回答 2

2

std::string::copy不会 '\0' 终止目标,因此您必须自己执行此操作。一个可能更好的解决方案是:

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

,并且根本不使用 a char[]

于 2013-05-08T15:31:13.573 回答
1

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

你为什么不这样做

maindir << "./" << crntmainfile ;
maindir >> maindirectory;
maindir.clear();
于 2013-05-08T15:31:03.777 回答