принимая вход от пользователя - PullRequest
0 голосов
/ 07 мая 2010
 i tried to take input from user 
 input type is not determined(can be char or int)
 i wanna take input and store in pointer array
 while i doing that job forr each pointer i wanna take place from leap area
 that is using malloc
  but below code doesnot work why??? 

 int main(void)
{
    char *tutar[100][20],temp;
    int i;
    int n;
    i=0;

    while(temp!='x')
    {
        scanf("%c",&temp);
        tutar[i]=malloc(sizeof(int));
        tutar[i]=temp;
        ++i;
    }

    n =i;
    for(i=0;i<=n;++i)
    {
        printf(" %c  ",*tutar[i]);
    }
    printf("\n\n");

   /*for(i=0;i<=n;++i)
   {
        printf("%d",atoi(*tutar[i]));
   }
    */
}

обратите внимание, что; этот сайт имеет проблемы при переписывании (редактировании) предыдущего письма это общая проблема или нет

1 Ответ

5 голосов
/ 07 мая 2010

В вашем коде есть несколько проблем, в том числе:

  • вы объявляете 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 в операторе присваивания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...