【问题标题】:C++ string appending problemsC++ 字符串附加问题
【发布时间】:2016-06-11 03:16:47
【问题描述】:

我现在遇到一些问题,在设置 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”。

提前致谢!

【问题讨论】:

  • 我看不出你的程序和数据有什么问题。您确定这是您尝试的示例数据吗?或者你在“你好!”之前有任何'\0'

标签: c++ arrays string append


【解决方案1】:

它是添加的,但是在字符串中已有的 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

【讨论】:

  • 没错,但您忽略了一个细节。不是 996 个空格,而是 996 个'\0' 符号。打印时将其视为字符串终止符。
  • 是的,你是对的,我实际上在看到你的评论前几​​秒钟就意识到,我通常将字符串对象的第二个参数设置为空格('')
【解决方案2】:

我认为问题在于当您执行test.resize(1000) 时,它会将1000 空字符 ('\0') 添加到字符串中。调试器可能会将空字符视为 字符串结尾 标记。因此,在 这些空字符之后添加的任何文本都不会显示。

说文本等于这个('_' = 空字符行尾标记):

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

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 2017-11-28
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多