我有一个变量,字符串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