我正在尝试找出代码中的错误,并且由于某种原因,在scanf()
循环之后,数组看起来很奇怪。
这可能是什么原因?
我输入的输入是“ a”,“ b”,“ c”。 这是控制台的输出:
all element are: a
all element are: b
all element are: c
s: c
after loop1: c
after loop3: c
s_arr
在循环完成后更改。
这是我的代码:
int main() {
char s[5];
char *s_arr[3];
for(int i=0; i<3; i++){
scanf("%s\n", s);
s_arr[i] = s;
printf("all element are: %s\n", s_arr[i]);
}
printf("s: %s\n", s);
printf("after loop1: %s\n", s_arr[0]);
printf("after loop3: %s\n", s_arr[2]);
return 0;
}
答案 0 :(得分:2)
您不会覆盖数组元素。但是,每个元素都是一个指针,并且使s_arr[0]
,s_arr[1]
和s_arr[2]
中的每个都指向s
中的字符串。
由于只有一个字符串,并且每个指针在循环后都指向相同的字符串,所以在打印出来时会得到相同的结果。
解决此问题的一种方法是将s_arr
做成一个字符串数组(即二维char
数组),然后将s
复制到每个字符串中。
此外,对于字符串输入,请考虑fgets()
,这样可以防止缓冲区溢出。