如何迭代在不知道其大小的情况下读取的字符串?

How to iterate a string in which was read without knowing its size?

本文关键字:情况下 读取 字符串 不知道 何迭代 迭代      更新时间:2023-10-16

char s[] = ""是否建议在不知道字符串大小的情况下读取字符串?

char s[] = "";
cin >> s;
cout << s[2];  // this is working
int k = 2;
cout << s[k]; // while this does not

有什么想法吗?

您正在创建一个长度为 1 的char数组,其中包含字符''。如果cins写入空字符串以外的任何内容,它将溢出数组的边界,导致未定义的行为。不要将cin与数组一起使用;请改用string

string s;
cin >> s;

然后,您必须检查您使用的字符索引是否在边界内,否则您将再次获得未定义的行为。

if (k < s.size()) {
cout << s[k];
}

所以不,在不知道数组大小的情况下访问数组(或string)是不安全的。

's' 是一个 1 个字符的数组。当您从 cin 读取时,超出第一个字符的任何内容都会写入超出分配的 's' 大小,这会导致未定义的行为。很可能"超越"部分实际上在"k"中,这将适用于第一个 cout,但在为 2 个 cout 初始化 k 后失败。

相关文章: