Вы не выделили никакой памяти в p
, поэтому ее элементы указывают на случайные места. Вы можете выделить память для строк с максимальной длиной 100, например:
int i;
for (i = 0; i < 20; i++)
p[i] = malloc(101);
Или же вы хотите массив символов , а не строк, в этом случае вы должны объявить его как
char p[20];
В этом случае вы не должны пытаться читать строки в каждом элементе с помощью scanf.
Обновление после добавления отсутствующей части кода:
Вы выделяете sizeof(int)
байтов памяти для ваших строк, что, скорее всего, равно 4, т. Е. Ваши входные строки, считываемые scanf
, не должны быть длиннее 3 символов. В противном случае вы получите ошибку переполнения буфера, которая может привести к ошибке сегментации, с которой вы боретесь.
Более того, tempc=p[i]
присваивает значение указателя символьной переменной! Это значение, преобразованное в символ, почти наверняка никогда не будет равно 'x'
.
Полагаю, вы пытаетесь получить первый символ p[i]
, который будет p[i][0]
или *p[i]
.
Я также подозреваю, что ваше состояние цикла противоположно тому, что вы имели в виду: сейчас цикл повторяется, пока tempc
равен 'x'
- вы, вероятно, хотели повторить до tempc
становится 'x'
. И вам также следует проверить, что ваш цикл не работает более 20 раз:
...
}while(tempc != 'x' && i < 20);