2010-05-07 2 views
0
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])); 
    } 
    */ 
} 

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

+3

Извините, но этот код беспорядок. Вы определяете двумерный массив указателей на символы, выделяя им память и затем переписывая указатели, чтобы все указывали на эту переменную temp, просачивав всю выделенную память. Ни ваш вопрос, ни код не имеют большого смысла. Я не думаю, что такой код будет даже правильно компилироваться, не говоря уже о запуске. Пожалуйста, переработайте код (желательно с нуля), и если он все еще не работает, попросите нас снова, предоставив больше информации, чем просто «не работает». – Kaivosukeltaja

+0

@ gcc - Вы все свои вопросы пишете как загадки? – Dann

+2

@burnt_hand Думаю, он пишет все свои вопросы через автоматизированного переводчика. Я не могу думать ни о каком другом способе, которым он закончил бы такие вещи, как «предыдущая почта» и «область прыжка». –

ответ

5

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

  • вы объявляете tutar как двумерный массив указатели на символ, затем используйте его как одномерный массив.
  • tutar[i]=temp присваивает значение temp (a char) tutar [i] (указатель на char), эффективно переписывая указатель на недавно зарезервированный блок памяти
  • вы не инициализируете 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 в инструкции присваивания.

+1

+1 для того, чтобы понять значение вопроса – Qwertie

Смежные вопросы