C++中向空string赋值char无输出,代码错误原因咨询
问题分析与解决
先看你的代码:
int main() { string sample = "abcdef"; string result; result[0]='a'; cout<<result[0]; }
错误原因
默认构造的std::string对象result是空的,它的长度为0,没有分配任何字符存储空间。直接通过result[0] = 'a'访问并修改索引0的位置,属于内存越界访问,这是C++里的未定义行为——程序可能没有报错,但也不会按预期工作,这里就表现为没有输出。
正确的写法
你可以用以下几种方式给空字符串添加字符:
- 使用
push_back方法:result.push_back('a'); - 先调整字符串的大小,再赋值:
result.resize(1); result[0] = 'a'; - 初始化时直接指定字符和长度:
string result(1, 'a'); - 使用
+=操作符:result += 'a';
为什么result = sample可行
赋值操作result = sample会自动为result分配足够的内存,把sample的内容完整复制过去,不存在内存越界的问题,所以能正常运行。
内容的提问来源于stack exchange,提问作者asdjkag
相关产品推荐
相关产品推荐

