2015-12-09 142 views
-1

我有一個變量,字符串temp;使用strncpy將字符串複製到二維字符數組

temp的值是一些字符串,它在一個循環中,並且值不斷變化。

我需要使用變量存在於temp變量串備份:

char asset[8][256] 

我嘗試使用:

strncpy(&asset[8][256], temp.c_str(), 256) 

但它仍然無法正常工作。我究竟做錯了什麼?

+0

你是什麼意思「不工作?你會得到錯誤輸出?如果是這樣,請更新您的問題與你得到的確切輸出。 – EkcenierK

+1

這不是問題,但'strncpy'是一個意外等待發生,仔細閱讀它的規範:它不是一個「安全的」strcpy,因爲如果輸入太大,它會悄悄地給你一個沒有終止的字符串 –

+0

想一想,有機會回答你自己的問題: - ''strncpy(&asset [8] [256],temp.c_str(),256)' - 你說你寫了一個循環。沒有東西在那條線上以某種方式變化? – PaulMcKenzie

回答

0

你說你寫了一個循環,但是如果你每次寫同一個(非法的)地址,那麼你應該如何工作?

循環應該是這個樣子:

for (int i = 0; i < 8; ++i) 
{ 
    //... 
    strcpy(&asset[i][0], temp.c_str(), 256); 
    //... 
} 

你要寫信給&asset[0][0]&asset[1][0]&asset[2][0]等寫入&asset[8][256]開始在該位置[8][256],這是出界寫入字符串。

其次,如果你想要一個字符串的「備份」,你爲什麼要使用數組?爲什麼不是std::vector<std::string>push_back你想要備份的值?

#include <vector> 
//... 
std::vector<std::string> asset; 
std::string temp; 
//... 
asset.push_back(temp); // backs up temp. 

這不僅是容易得多,你不限於8個字符串,並沒有一個緩衝區溢出的機會。

+0

雅,感謝保羅的答案任何如何使用snprintf函數解決我使用s​​nprintf(資產[assetIDCount],256,「%s」,temp.c_str()) ;其中assetIDCount的增量值小於t 8.感謝幫助。 –