C++ 字符串追加问题

C++ string appending problems

我现在遇到了一些问题,在设置 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' 字符)`。

调整大小函数确实为字符串对象分配了 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 空字符 ('[=13=]')。调试器可能会将空字符视为 字符串结尾 标记。因此,在 之后添加的任何文本都不会显示这些空字符。

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

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