C++字符串附加问题

C++ string appending problems

本文关键字:问题 字符串 C++      更新时间:2023-10-16

我现在遇到了一些问题,在设置 c++ 字符串的某些值后,尝试将 char 数组附加到 c++ 字符串上,但我不明白为什么。我想知道你们中是否有人知道发生了什么。

这是我尝试运行的代码:

string test = "";
test.resize(1000);
char sample[10] = { "Hello!" };
test[0] = '1';
test[1] = '2';
test[2] = '3';
test[3] = '4';
test += sample;

通过调试器运行它,似乎test只是"1234",并且从未添加"Hello"。

提前感谢!

它是添加的,但在字符串中已有的 1000 个字符之后(其中 4 个是 1234,996 个是"\0"字符)"。

resize 函数确实为字符串对象分配 1000 个字符,但也将长度设置为 1000。这就是为什么有时你想做的是使用reserve

这通常是我会做的:

string test = "";
test.reserve(1000); // length still 0, capacity: 1000
char sample[10] = { "Hello!" };
test.push_back('1'); // length is 1
test.push_back('2'); // length is 2
test.push_back('3'); // length is 3
test.push_back('4'); // length is 4
test += sample; // length is now 10

或者,如果您想按照自己的方式进行操作:

string test = "";
test.resize(1000); // length is 1000
char sample[10] = { "Hello!" };
test[0] = '1'; // length is 1000
test[1] = '2'; // length is 1000
test[2] = '3'; // length is 1000
test[3] = '4'; // length is 1000
test.resize(4); // length is now 4, but the internal buffer still has a capacity of 1000 characters
test += sample; // length is now 10

我认为问题是当你test.resize(1000)1000字符串中添加了空字符'')。调试器可能会将空字符视为字符串结束标记。因此,在这些空字符之后添加的任何文本都不会显示。

假设文本等于此值('_' = 行尾标记的空字符):

test = "1234_______________Hello!"; 
            ^
            Debugger thinks text ends here