尽管我正在使用类似的代码解决一些提高我的技能的问题,但下面的代码却得到了输出“ a @” 我输入了10个'a's
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
char a[11];
for(int i = 0; i < 10; i++) cin >> a;
string s(a);
cout << s;
cout << a[3];
return 0;
}
答案 0 :(得分:8)
for(int i = 0; i < 10; i++) cin >> a;
在这里,您将一个字符串读入a
10次。前9次输入的内容无关紧要,因为它们都被彼此覆盖。如果其中任何一个字符的长度超过10个字符,则说明缓冲区溢出,并且您得到不确定的行为。
string s(a);
这里是使用放在std::string
中的第十个字符串构造一个a
。
cout << s;
cout << a[3];
现在,您要打印该字符串以及数组中的第四个字符。由于您根据评论输入了"a"
10次,因此第四个char
未初始化(前两个分别是'a'
和'\0'
),因此此打印是未定义的行为。
我的猜测是,您想读10个字符,例如:
for (int i = 0; i < 10; i++)
cin >> a[i];
并正确地以null终止字符串,如下所示:
a[10] = '\0';