【发布时间】:2012-01-10 20:24:35
【问题描述】:
我正在使用仅包含 char[32] 的结构写入二进制文件。我基本上需要通过对字符串数组执行各种计算并连接结果来格式化每个数据块。我正在尝试将 std::string 复制到没有空终止的 char 数组中。我读得越多,我就越困惑。如果我这样做:
struct block{
char data[32];
};
block blocks[2048];
std::string buffer;
buffer = "12345678123456781234567812345678";
strcpy(blocks[0].data, buffer.c_str());
我得到一个错误,因为用 c_str() 添加空终止符会使字符串长度为 33。如果我从字符串中减去一个字符,它可以工作,但是我有空终止符,这是我不想要的。我可以成功地做到以下几点:
strcpy(blocks[0].data, "12345678123456781234567812345678");
但我想先构造字符串,因为它通常涉及连接来自不同数组的不同字符串。例如,我可以使用 std::string:
std::string buffer = stringArray1[0] + stringArray2[0];
strcpy(blocks[0].data, buffer.c_str());
但是我又得到了空终止符。我只想准确复制 std::string 中的字符,没有空终止符。
我正在使用 VC++ 6.0。
【问题讨论】:
-
你知道 VC++ 6.0 就像 IE 6 一样。可怕。如果您能够切换编译器,请快速切换。
-
谢谢大家的回复。我最终使用了 memcpy;我之前曾尝试过,错误地使用 std::string.c_str 而不是 std::string.data。此外,我们通常使用 VS2010,但这是一个遗留产品,需要一些尚未更新的旧库以支持 VS6.0 之后的任何内容。
标签: c++ stdstring strcpy arrays