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

时间:2017-04-09 06:14:26

标签: c++

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

string s;
cin >> s;

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

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

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

答案 1 :(得分:1)

&#39; S&#39;是一个1个字符的数组。当您从cin读取时,超出第一个字符的任何内容都会超出分配的“#”的大小,从而导致未定义的行为。很可能是超越&#39; part实际上在&#39; k&#39;中,它适用于第一个cout,但是在k被初始化为第二个cout后失败。