Использование strdup в зарезервированное пространство malloc - PullRequest
1 голос
/ 05 марта 2010

Я никогда не использовал malloc для хранения больше значений, но мне нужно использовать strdup для упорядочивания строк входного файла, и я не могу заставить его работать.

Я, хотя и использую strdup(), чтобы получить указатель на каждую строку и позже, помещаю каждую в пробел в соответствии с количеством строк, зарезервированных для malloc().

Я не знаю, нужно ли мне это делать, как зарезервированная память была массивом для указателей, я имею в виду использование char**, а затем помещать каждый указатель на каждый блок в зарезервированное пространство.

Мне хоть как то так:

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

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

Я не знаю, что делать после этого, я даже не знаю, правильно ли это, в таком случае, что мне делать, чтобы сохранить указатель на строку в позиции буфера?

Привет

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Если я правильно понимаю ваше требование. Вам нужно будет сделать что-то вроде:

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 голосов
/ 05 марта 2010

Ваш буфер будет содержать только один указатель.Вам нужно что-то вроде:

   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);
   }
...