动态读取文本文件并放入 C 中的指针字符数组

Posted

技术标签:

【中文标题】动态读取文本文件并放入 C 中的指针字符数组【英文标题】:Reading a text file dynamically and put into a pointer char array in C 【发布时间】:2016-11-22 14:21:09 【问题描述】:
int i=0;
int numProgs=0;
char* input[500];
char line[500];
FILE *file;
file = fopen(argv[1], "r");
while(fgets(line, sizeof line, file)!=NULL) 
    /*check to be sure reading correctly
    add each filename into array of input*/
    input[i] = (char*)malloc(strlen(line)+1);
    strcpy(input[i],line);
    printf("%s",input[i]);/*it gives the hole line with\n*/
    i++;
    /*count number of input in file*/
    numProgs++;

/*check to be sure going into array correctly*/
fclose(file);

我不知道每行输入 txt 的大小,所以我需要动态执行。 我需要使用 char* input[] 这种类型的数组,而且我需要用 int numProgs 保存行号。 输入文本文件有多行,每行的字符大小未知。

【问题讨论】:

可能重复:***.com/questions/8236/… 你调用分配内存说char *line,而不是有一个固定的数组。调用fgets 后,检查是否读取了newline。如果是的话,你得到了整条线。如果没有,请重新分配一个更大的数组,并根据需要读取更多数组,以获取整行。但是不要在每一行之后free(line) - 保持分配直到你完成。 @schil227 这个 Q 是文件的行数。 然后可能是 ***.com/questions/2137156/… - 基本上遍历每个字符直到找到行尾字符 (\n) 注意:对相关变量使用struct。每个组件的单独数组是 soo 60ies/70ies 【参考方案1】:
FILE *file;
file = fopen("test.txt", "r");
fseek(file, 0, SEEK_SET);
int numRow = 1, c;
while ((c = fgetc(file)) != EOF)

    if (c == '\n')
        numRow++;

fseek(file, 0, SEEK_SET);
char **input;
input = malloc(sizeof(char) * numRow);
int i, j = 0, numCol = 1, curPos;
for (i = 0; i < numRow; i++)

    curPos = (int)ftell(file);
    while((c = fgetc(file)) != '\n')
    
        numCol++;
    
    input[i] = malloc(sizeof(char) * numCol);
    fseek(file, curPos, SEEK_SET);
    while((c = fgetc(file)) != '\n')
    
        input[i][j++] = c;
    
    input[i][j + 1] = '\n';
    numCol = 1;
    j = 0;

【讨论】:

输入文本文件多行,每行字符大小未知。 啊,我明白了。检查更新的答案,看看是否有效。 为什么会出现死循环?所以给出了运行时间错误 while((c = fgetc(file)) != '\n') numCol++;它给出了该状态下的运行时错误

以上是关于动态读取文本文件并放入 C 中的指针字符数组的主要内容,如果未能解决你的问题,请参考以下文章

从文本文件中读取单词并存储到 C 中的动态数组 Valgrind 错误中

C 编程 - realloc 应该多久使用一次?

C / C ++将字符串放入二维数组?

java读取文件中多个数据,放入不同数组

指针数组的动态内存分配

指向动态二维字符数组的三重指针的内存分配