簡體   English   中英

從文本文件中讀取長度未知的字符串並打印它們

[英]Reading Strings of unknown length from text file and printing them

我有一個問題,當程序遇到'\\ 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 : %s\n", 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; 

}

問題是,當我運行程序時,它會運行無限循環(我懷疑是主循環中的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));

我唯一能想到的就是我的返回線。 是不正確的? 我在這里迷路了,將不勝感激!

需要擴展以緩沖讀取。 但是你的方法是錯誤的。

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] = '\0';
    return line;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM