Когда я пытаюсь проходной следующей программой C, я получаю ошибку: «неисправность Сегментации: 11»C - Перебор массива указателей
#include <stdio.h>
main() {
int i;
char *a[] = {
"hello",
"how are you",
"what is your name"
};
for (i = 0; a[i][0] != '\0'; i++) {
printf("\n%s", a[i]);
}
}
Но когда я заменить тест в цикле for
со следующим, то я не получаю ошибку, и все работает нормально.
for (i = 0; i < 3; i++) {
printf("\n%s", a[i]);
}
Я бы очень признателен, если кто-то может объяснить мне, почему тест a[i][0] != '\0'
не работает, и что я должен делать вместо этого.
'for (i = 0; i <3; i ++) {...}' :: нет дозорного. – wildplasser
Я думаю, что у всех остальных это есть, но я просто добавлю, что память после вашего массива не определена. На самом деле это возможно (1/256 раз, если у вас действительно есть память после массива), что ваш код будет работать. Это просто совершенно не определено. Массивы в C не имеют встроенного размера. Вы должны отслеживать размер параллельно с вашим массивом, поэтому ваша проверка <3 работает. Или, с sizeof, вы должны отслеживать тип. Когда вы передаете массив функции, он превращается в указатель, но вы теряете sizeof. – xaxxon