Пройдите по строковому массиву в c

#c #arrays #string #pointers

#c #массивы #строка #указатели

Вопрос:

 #include <stdio.h>

int main(int argc, const char *argv[])
{
    const char *s[] = {"a", "b", "c", NULL};
    const char **p = s;
    while (*p != NULL) {
        printf("string = %sn", *p);
        (*p)  ;
    }
    return 0;
}
 

Я хочу пройтись по массиву строк и распечатать строку, чтобы получить нулевой отправитель.
Однако он генерирует сообщение, завершенное сигналом SIGSEGV (ошибка границы адреса).
Кто-нибудь может сказать мне, почему?

Комментарии:

1. в то время как (*p) и (*p) , безусловно, вызывают подозрения.

2. возможно, потому, что вы явно вводите нулевое значение в свою строку в конце. строковый массив автоматически будет содержать значение null, вам не нужно его определять. удалите значение null и используйте метод length() для вашего цикла. это может помочь.

3. @aradhna массив строк автоматически будет содержать значение null, вам не нужно его определять, я не могу с этим согласиться..

Ответ №1:

 (*p)  ;
 

Должно быть просто:

 p  ;
 

Вот что вы делаете:

 p --> * --> "a"
|     ^ incrementing this
checking this for null
 

Вы увеличиваете неправильный указатель.

Комментарии:

1. OP проверяет правильное значение на отсутствие 0 . Единственная проблема здесь — неправильный инкремент.


Ответ №2:

С помощью этой строки :

 (*p)  
 

Вы будете увеличивать p[0] .

Я думаю, это не то, чего ты хочешь.

Замените его на :

 p  ;
 

Он должен работать нормально 😉