Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不知道大小的情况下迭代读取的字符串?_C++ - Fatal编程技术网

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

C++ 如何在不知道大小的情况下迭代读取的字符串?,c++,C++,chars[]=”在不知道字符串大小的情况下读取字符串是否可取 char s[] = ""; cin >> s; cout << s[2]; // this is working int k = 2; cout << s[k]; // while this does not chars[]=”; cin>>s; cout“s”是一个由1个字符组成的数组。当您从cin读取时,超出第一个字符的任何内容都会写入超出分配的“s”大小的内容,从而导致未定义的行为。很

chars[]=”
在不知道字符串大小的情况下读取字符串是否可取

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

cout“s”是一个由1个字符组成的数组。当您从cin读取时,超出第一个字符的任何内容都会写入超出分配的“s”大小的内容,从而导致未定义的行为。很可能“beyond”部分实际上在“k”中,这将在第一个cout中工作,但在第二个cout的k被初始化后失败。

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

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

string s;
cin >> s;
然后,必须检查所使用的字符索引是否在边界内,否则将再次出现未定义的行为

if (k < s.size()) {
    cout << s[k];
}
if(kcout您正在创建一个长度为1的
char
数组,其中包含字符
'\0'
。如果
cin
将空字符串以外的任何内容写入
s
,它将溢出数组的边界,导致未定义的行为。不要对数组使用
cin
,而是使用
string

string s;
cin >> s;
然后,必须检查所使用的字符索引是否在边界内,否则将再次出现未定义的行为

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