2013-05-08 64 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