SIGSEGV, Ошибка сегментации.пока printf () значение индекса массива - PullRequest
0 голосов
/ 11 октября 2018

Я хочу знать, как работает 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 голосов
/ 11 октября 2018

согласен с ответом выше.% s говорит разыменование arg и выводит содержимое.[i] использует 8-битное значение в качестве указателя.

0 голосов
/ 11 октября 2018

При компиляции с 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]);
...