#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 ;
Он должен работать нормально 😉