c中的部分填充数组在C中打印时出现分段错误

时间:2016-07-21 05:39:10

标签: c arrays

运行以下程序时出现分段错误。

#include<stdio.h>
int main()

{

    char *a[10] = {"hi", "hello", "how"};
    int i ;
    printf("%s %s %s %s %s\n",a[0],a[1],a[2],a[3],a[4]);
    for (i = 0;i < 10; i++)
        printf("%s\n",a[i]);
    return 0;
}

输出

hi hello how (null) (null)

hi

hello

how

Segmentation fault (core dumped)

我有gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)和Linux内核3.16.0-34-generic。

我知道所有非初始化的数组条目都得到值0,所以我希望printf上有一个null。 但它给出了分段错误。

奇怪的是,当我用p printf (“%s\n”,a[i])替换rintf(“%s %d\n”,a[i],i)时,我可以获得null未填充的数组条目。

事实上,%s\n之间的空格也没有分段错误。

有谁能告诉我这种行为背后的原因。

1 个答案:

答案 0 :(得分:3)

取决于您的编译器,您的第二个NULL将替换为var implicitUnwrappedOptionalInt: Int! = nil var optionalInt: Int? = nil

查看assembly result 并且nil的系统实现似乎会以 SharePhoto photo = new SharePhoto.Builder() .setBitmap(shareBitmap) .setCaption("Description") .build(); 作为参数崩溃。