我试图找出我的代码中的一个错误,并且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;
}
您没有覆盖数组元素。然而,每一个元素是一个指针,并且正在对每一个s_arr[0]
,s_arr[1]
和s_arr[2]
所有的点在字符串s
。
由于只有一个字符串,并且每个指针在循环后都指向同一个字符串,因此打印出来时会得到相同的结果。
解决这个问题的一种方法是制作s_arr
一个字符串数组(即二维char
数组),然后复制s
到每个字符串中。
另外,请考虑fgets()
字符串输入,以便防止缓冲区溢出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句