字符串流中的随机字符

Random characters in stringstream

本文关键字:随机 字符 字符串      更新时间:2023-10-16

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

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是null终止的,但当它被写入maindir时,终止符就丢失了。是什么原因造成的?<<只是不向字符串流写入空字符吗?我该如何修复它?

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

std::string::copy不会'\0'终止目标,所以您必须自己完成。一个可能更好的解决方案是:

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

,并且根本不使用char[]

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

你为什么不直接做这个

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