我正在使用以下代码来打印字符串。
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[100];
while(1){
char f[10000];
cin>>s;
strcat(f,s);
cout<<f<<endl;
}
return 0;
}
在每次迭代中,完成f字符数组的新分配。
输入
a
b
c
d
我预计输出会是这样的:
a
b
c
d
但实际输出是:
a
ab
abc
abcd
为什么会这样?虽然我在每次迭代中声明一个新数组 那么为什么这种输出呢?
答案 0 :(得分:3)
因为:未定义的行为。
您没有初始化阵列。你只是在声明它。只因为你宣布
char f[10000];
并不意味着它会自动初始化为空数组。
因此,您将获得一个声明的数组,其中包含随机数据。
此时,您不能指望获得任何可预测的行为。你得到的结果将是一个合理的结果。但不是唯一的一个。
编辑:每次循环时,数组最终都在堆栈上的相同位置。第一次,您的操作系统为堆栈设置了一个新页面,清除为0.您strcat()编辑了您的字符串。下一次循环,你的旧数据,从上一次迭代,仍然存在。所以,你strcat()更多东西,将它追加到最后。