SIGSEGV,分段错误。而printf()的值是数组的索引

时间:2018-10-11 10:44:22

标签: c++ segmentation-fault printf sigsegv dev-c++

我想知道scanf和数组的工作原理,所以我创建了一个代码,逐行打印数组的每个索引的值。

#include<stdio.h>
int main(){
    char a[35];
    scanf("%30s", a);
    for(int i=0;i<30;i++){
        printf("index %d value :%s\n",i,a[i]);
    }
}

但是在编译代码时出现错误。调试代码后, 我收到“程序收到信号SIGSEGV,分段错误。” 我正在使用Dev-C ++

2 个答案:

答案 0 :(得分:2)

使用g ++进行编译时,出现以下警告:

test.cc: In function ‘int main()’:
test.cc:6:45: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘int’ [-Wformat=]
         printf("index %d value :%s\n",i,a[i]);
                                         ~~~~^

您可能想将%s更改为%c,因为数组的每个元素都是一个字符:

printf("index %d value :%c\n",i,a[i]);

答案 1 :(得分:2)

同意以上答案。 %s说取消引用arg并显示内容。 a [i]使用8位变量作为指针。