В вашем коде есть несколько проблем, в том числе:
- вы объявляете
tutar
как двумерный массив указателей на символ, а затем используете его как одномерный массив
tutar[i]=temp
присваивает значение temp (символ) tutar [i] (указатель на символ), эффективно перезаписывая указатель на вновь зарезервированный блок памяти
- вы не инициализируете
temp
, поэтому он будет иметь значение мусора - иногда он может иметь значение x
, в котором ваш цикл не будет выполняться
Вот улучшенная версия (она не тестировалась, и я не претендую на то, что она идеальна):
int main(void)
{
char *tutar[100], temp = 0;
int i = 0;
int n;
while(temp!='x')
{
scanf("%c",&temp);
tutar[i]=malloc(sizeof(char));
*tutar[i]=temp;
++i;
}
n =i;
for(i=0;i<=n;++i)
{
printf(" %c ",*tutar[i]);
}
printf("\n\n");
}
Обратите внимание, что если вам действительно не нужно выделять память динамически, вам лучше использовать простой массив символов:
char tutar[100], ...
...
while(temp!='x')
{
scanf("%c",&temp);
tutar[i++]=temp;
}
...
Ради краткости я увеличил i
в операторе присваивания.