Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
289 views
in Technique[技术] by (71.8m points)

c - Memory at runtime

I have a problem which says I have to read an unknown number of text lines from a file in an array of pointers and allocate memory at runtime.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp = fopen("file.txt","r");
    char *arrp[10];
    int i=1;

    while(!feof(fp))
    {
        arrp[i]=malloc(sizeof(char)*51);
        fgets(arrp[i],51,fp);
        i++;
    }

    return 0;
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I'd suggest counting the number of lines first.

int tmp;
int linecount = 0;
FILE *fp = fopen("file.txt","r");

while ((tmp=fgetc(fp))!=EOF) {
    if (tmp=='
') 
         ++linecount;
}

rewind(fp); // resets the stream to beginning of file

From there, you can malloc the appropriate amount of array pointers (instead of initializing a fixed number).

 char** lines;
 lines = malloc(linecount * sizeof(char*));

and use fgets as normal to then read each line into lines[i]


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...