gpt4 book ai didi

c++ - 为什么我在第一个代码中出现段错误,但在第二个代码中却没有?

转载 作者:行者123 更新时间:2023-11-30 18:16:56 25 4
gpt4 key购买 nike

我已经声明了一个由 10 个字符指针组成的数组。在 10 个字符中,我只初始化了 3 个。当我在 \n 之后使用 %s 打印数组时,它会给出如下输出:

hi
hello
how
segmentation fault

但是如果我不使用 \n 那么它会给出如下输出:

hihellohow(null)...(7 times).

有人可以解释一下吗?

<小时/>

代码 1

#include <stdio.h>

void main()
{
char *a[10] = {"hi", "hello", "how"};
int i = 0, j = 0;

a[0] = "hey";
for (i = 0;i < 10; i++)
printf("%s\n", a[i]);
}

代码2

#include <stdio.h>

void main()
{
char *a[10] = {"hi", "hello", "how"};
int i = 0, j = 0;

a[0] = "hey";
for (i = 0;i < 10; i++)
printf("%s", a[i]);
}

最佳答案

正如您自己所说,您不会初始化超过第三个的数组元素,因此它们会自动初始化为空指针。尝试打印这些空指针是未定义的行为,因此任何事情都可能发生(包括第一个示例中的段错误,或者像第二个示例中那样出现)。

在这两种情况下,您的代码都是错误的,尝试解释为什么会发生随机事件(再次,段错误或看起来有效)是毫无意义的。

关于c++ - 为什么我在第一个代码中出现段错误,但在第二个代码中却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com