2016-04-06 2 views
1

Я спасаю символы из файла Си в этом массивеСохранение Char от Лекса массива Char в C

char *idTable[100]; 

Внутри цикла в то время,

if(ntoken == 1){ 
     idTable[numId] = yytext; 
     printf(" \nVariable %s", idTable[numId]); 
     printf(" Found\n"); 
     numId++; 
    } 

, а затем перебрать массив. Переменная yytext должна иметь только идентификаторы и переменные, такие как int i, int j, int cont

Когда я печатаю эти символы внутри цикла, он показывает мне переменные, которые я хочу сохранить. Но когда я итерацию массива он принимает весь текст из переменной в нижней части:

while(i<numId){ 
    printf("%d", i); 
    printf("%s", idTable[i]); 
    i++; 
    } 

Так,

printf(" \nVariable %s", idTable[numId]); 
     printf(" Found\n"); 

напечатает символы, такие как Variable i Found Но printf("%s", idTable[i]); всегда будет печатать текст внутри из файла I хотеть увидеть. Что-то вроде этого:

i; 
    int j; 
    char c; 
    char cadena; 
    float z; 
    int 89aa12; 
    z=14.9e-8; 
    z= 3454y45hrthtrh; 
    z== 3454y45hrthtrh; 
    z= 3454y45hrthtrh; 
    z=12.9; 
    cadena="Hola"; 
    scanf ("%d",i); 
    i=i*2; 
    printf ("El doble es %d",i); 
    Y="Cualquier Cosa 1"; 
    u=z+y 

ответ

0

Вы сохраняете указатель на ту же область памяти в каждом элементе idTable, поэтому все, что память установлена ​​последнего является то, что каждый из них будет указывать.

Вам необходимо выделить дополнительную память для каждой строки, которую вы хотите сохранить (или используйте std :: string).

strdup может делать то, что вы хотите.

idTable[numId] = strdup(yytext); 

но не забудьте освободить эту память, когда вы закончите с ней.

+0

Большое спасибо, это именно то, что я хотел. Я люблю тебя: ') –

+0

Не забудьте подняться и принять ответ, если он будет полезен и ответит на ваш вопрос :) – xaxxon

+0

Кроме того, лично я бы использовал std :: vector и не беспокоиться о распределении/де-распределении Память. – xaxxon