2015-12-09 117 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.感谢帮助。 –