2010-03-05 10 views
1

Je n'ai jamais utilisé malloc pour stocker plus de valeurs, mais je dois utiliser strdup pour ordonner les lignes d'un fichier d'entrée et je n'ai pas le moyen de le faire fonctionner.Utilisation de strdup dans l'espace réservé de malloc

J'utilise cependant strdup() pour obtenir un pointeur sur chaque ligne et plus tard, placez chacun dans un espace en fonction du nombre de lignes réservées avec malloc().

Je ne sais pas si je dois le faire comme la mémoire réservée était un tableau de pointeurs, je veux dire en utilisant char** et plus tard mettre chaque pointeur à chaque strdup dans l'espace réservé.

Je pensais que quelque chose comme ceci:

char **buffer; 
char *pointertostring; 
char *line; // line got using fgets 

*buffer = (char*)malloc(sizeof(char*)); 
pointertostring = strdup(line); 

Je ne sais pas quoi faire après cela, je ne sais même pas si cela est exact, dans ce cas, que dois-je faire pour stocker les pointeur sur la chaîne dans une position de tampon?

Observe

Répondre

2

Si je comprends bien vos besoins. Vous devrez faire quelque chose comme:

char **buffer; 
char line[MAX_LINE_LEN]; // line got using fgets 
int count; // to keep track of line number.  

// allocate one char pointer for each line in the file. 
buffer = (char**)malloc(sizeof(char*) * MAX_LINES); 

count = 0; // initilize count. 

// iterate till there are lines in the file...read the line using fgets. 
while(fgets(line,MAX_LINE_LEN,stdin)) { 
    // copy the line using strdup and make the buffer pointer number 'count' 
    // point to it 
    buffer[count++] = strdup(line); 
} 
.... 
.... 
// once done using the memory you need to free it. 
for(count=0;count<MAX_LINES;count++) { 
    free(buffer[count]); 
} 
.... 
.... 
0

Votre tampon ne contient qu'un seul pointeur. Vous avez besoin de quelque chose comme:

char **buffer; 
    char *pString; 
    int linecount; 

    buffer = (char **)malloc(sizeof(char *)*MAXIMUM_LINES); 
    linecount = 0; 

    while (linecount < MAXIMUM_LINES) { 
     pString = fgets(...); 
     buffer[linecount++] = strdup(pString); 
    } 
+0

Ensuite, j'utilise realloc pour adapter l'espace alloué. Je vous remercie! – sui