我有一個變量,字符串temp
;使用strncpy將字符串複製到二維字符數組
temp
的值是一些字符串,它在一個循環中,並且值不斷變化。
我需要使用變量存在於temp
變量串備份:
char asset[8][256]
我嘗試使用:
strncpy(&asset[8][256], temp.c_str(), 256)
但它仍然無法正常工作。我究竟做錯了什麼?
我有一個變量,字符串temp
;使用strncpy將字符串複製到二維字符數組
temp
的值是一些字符串,它在一個循環中,並且值不斷變化。
我需要使用變量存在於temp
變量串備份:
char asset[8][256]
我嘗試使用:
strncpy(&asset[8][256], temp.c_str(), 256)
但它仍然無法正常工作。我究竟做錯了什麼?
你說你寫了一個循環,但是如果你每次寫同一個(非法的)地址,那麼你應該如何工作?
循環應該是這個樣子:
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個字符串,並沒有一個緩衝區溢出的機會。
雅,感謝保羅的答案任何如何使用snprintf函數解決我使用snprintf(資產[assetIDCount],256,「%s」,temp.c_str()) ;其中assetIDCount的增量值小於t 8.感謝幫助。 –
你是什麼意思「不工作?你會得到錯誤輸出?如果是這樣,請更新您的問題與你得到的確切輸出。 – EkcenierK
這不是問題,但'strncpy'是一個意外等待發生,仔細閱讀它的規範:它不是一個「安全的」strcpy,因爲如果輸入太大,它會悄悄地給你一個沒有終止的字符串 –
想一想,有機會回答你自己的問題: - ''strncpy(&asset [8] [256],temp.c_str(),256)' - 你說你寫了一個循環。沒有東西在那條線上以某種方式變化? – PaulMcKenzie