字符串中消失的字符,但使用索引访问
Disappeared characters in String But Accessed with index
在下面的程序中,
int main()
{
int i;
string a;//unallocated string;
for( i=0;i<26;i++)
{
a[i]=i+97;// trying to write a char at index i of a
}
cout<<" a[i] : ";
for(i=0;i<26;i++)
{
cout<<a[i];// printing the characters
}
cout<<"n a as string : "<<a; // the string disappeared
}
输出:
A[i] : abcdefghijklmnopqrstuvwxyz
a 作为字符串:
我的问题是
字符串 a 的索引处存储的字符在哪里?
为什么当我尝试写入未分配的字符串时没有错误?
有人可以解释发生了什么吗?
我正在使用带有 c++11 的 gcc
当你做a[i]
你正在使用string::operator[]
它明确说:
返回对指定位置位置处的字符的引用。 不执行边界检查
a
是默认构造的,因此它的大小为 0。您正在尝试在这些边界之外进行索引,因此您在那里读取或写入的任何内容都是未定义的。
看起来您正在使用 26 作为循环上限的幻数。而是使用size(a)
(或在 C++17 之前使用a.size()
)。然后,如果你想执行循环 26 次,只需像这样初始化a
:string a(26, ' ')
实时(略有改进)示例
编辑:
正如AndyG所指出的C++在这种情况下确实为我们提供了更好的初始化string
的方法iota
是一个很好的选择。除了初始化 for 循环之外
iota(begin(a), end(a), 'a')
我已经更新了示例以包含此内容。
相关文章:
- 编译器(Visual C++)如何优化按索引访问矢量元素?
- 如何通过索引访问枚举类
- 通过索引访问 rapidjson::D ocument array
- 可以使用整数索引访问向量元素吗?
- 从对象创建矢量包装器,该对象只允许使用索引访问向量
- 如何使用索引访问C 结构属性值
- 字符串中消失的字符,但使用索引访问
- 是否可以使用 1D 索引访问 C++ 2D int 数组
- 提升图形库:获取edge_descriptor或通过 int 类型的索引访问边缘
- 在运行时按索引访问 std::tuple 元素的最佳方法
- 使用枚举作为索引访问 2D 向量
- 通过索引访问矢量的速度:向后与向前
- 是否可以使用负索引访问二维数组
- C++中基于类矩阵结构的索引访问
- 直接索引访问与"high"内存使用量相比的理论影响是什么? "shifted"使用"low"内存使用情况的索引访问?
- 增强对哈希唯一索引的多索引访问
- C++ STL 向量迭代器与索引访问和线程安全
- 如何通过索引访问 boost::multi_index::multi_index_container<> 的所有元素?
- 向量索引访问与迭代器访问的效率
- 具有唯一元素和按索引访问的容器