char s[] = ""
是否可以在不知道字符串大小的情况下读取字符串?
char s[] = "";
cin >> s;
cout << s[2]; // this is working
int k = 2;
cout << s[k]; // while this does not
有什么想法吗?
答案 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后失败。