从文本文件中读取未知长度的字符串并打印出来



我有一个问题,当程序遇到'n'时,如何从文本文件中读取未知长度的字符串,同时将它们打印出来。如果程序注意到文件中没有剩余的字符串可读,则程序应该结束。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFLEN 2 
#define CHUNKSZ 2 

char *getStrFromFile(FILE *fpin); 
int main(void)
{
      FILE *fpin;
      fpin = fopen("test.txt","r");
      int d = 0;
while(1)
{
    char *ln;
    ln = getStrFromFile(fpin);
    if (!ln)
        break;
    ++d;
    printf("line %d : %sn", d, ln);
    free(ln);
}
    fclose(fpin);
    return(0);
}

char *getStrFromFile(FILE *fpin) 
{
    int i = 0;
    char *line;

    line = (char*)malloc(DEFLEN);
    fgets(line,strlen(line),fpin);
        if(line[strlen(line-1)] == 'n')
            return line;
char  *temp;
temp = line;
char *read;
    read = (char*)malloc(CHUNKSZ);
    fgets(read,strlen(read),fpin);
    line = (char*)malloc(strlen(temp)+strlen(read));
    for(i; i<strlen(temp);i++);
        line[i]=temp[i];
    for(i;i<strlen(read);i++);
        line[i+strlen(temp)] = temp[i];
    free(read);
    free(temp);
    return line; 
}

问题是,当我运行程序时,它运行一个无限循环(我怀疑是main中的while(1)),但似乎没有打印出文本文件中的字符串。

它打印的只是:

line 1 :
line 2 :
line 3 :

…等等,直到永远。

当我需要打印时,例如:

line 1 : 0
line 2 : 012345
line 3 :
line 4 : 567890

程序读取4行文本文件的示例。

坦率地说,我被卡住了,不知道我做错了什么。我已经让它打印了一些东西,但它是沿着ASCII字符177 177 + 177 177行的东西。

似乎指向这行代码中的错误:

line = (char*)malloc(strlen(temp)+strlen(read));

我唯一能想到的就是我的回归线;是不正确的?我在这里迷路了,帮助将不胜感激!

需要将buffer扩展到read。但你的方式是错误的。

char *getStrFromFile(FILE *fpin){
    int i=0, ch, size=DEFLEN+1;
    if(EOF==(ch=fgetc(fpin)))
        return NULL;
    ungetc(ch, fpin);
    char *line = malloc(size);
    while(EOF!=(ch=fgetc(fpin)) && ch != 'n'){//Do not include 'n'
        line[i++] = ch;
        if(i==size-1){
            size += CHUNKSZ;
            line = realloc(line, size);
        }
    }
    line[i] = '';
    return line;
}

相关内容

  • 没有找到相关文章

最新更新