使用strdup进入malloc保留空间

时间:2010-03-05 12:28:30

标签: c malloc strdup

我从来没有使用过malloc来存储多个值,但是我必须使用strdup来命令输入文件的行,而且我没有办法让它工作。

我使用strdup()来获取指向每一行的指针,然后根据malloc()保留的行数将每一行放入一个空格。

我不知道是否必须这样做,因为保留内存是一个指针数组,我的意思是使用char**,然后将每个指针放入每个strdup到保留空间。

我虽然这样:

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

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

我不知道在那之后该怎么做,我甚至不知道这是否正确,在这种情况下,我应该怎么做才能将指针存储到缓冲区的位置?

此致

2 个答案:

答案 0 :(得分:2)

如果我理解你的要求。你必须做类似的事情:

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

答案 1 :(得分:0)

你的缓冲区只会有一个指针。你需要这样的东西:

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