为什么数组会被覆盖?

转世者

我试图找出我的代码中的一个错误,并且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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章