-1 c c++ pointers newline segmentation-fault
我已经声明了一个包含10个指向字符数组的数组.在10个我初始化时只有3个.当我使用%s以下内容打印数组时,\n它给出如下输出:
hi
hello
how
segmentation fault
Run Code Online (Sandbox Code Playgroud)
但如果我不使用\n那么它给出输出如下:
hihellohow(null)...(7 times).
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
代码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]);
}
Run Code Online (Sandbox Code Playgroud)
代码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]);
}
Run Code Online (Sandbox Code Playgroud)
正如您自己所说,您不会将数组元素初始化超过第三个,因此它们会自动初始化为空指针.尝试打印这些空指针是Undefined Behavior,因此可能发生任何事情(包括第一个示例中的段错误,或者看起来像第二个示例中那样工作).
在这两种情况下,您的代码都是错误的,尝试解释为什么会发生随机事件(再次,段错误或似乎工作)是没有意义的.