0
我有我需要幫助的作業問題。我需要實現一個功能char *getStrFromFile(FILE*);
。我只是不明白它。我試圖找出這個問題。使用fgets +動態內存分配
該函數安全地從fpin指向的打開文件 中讀取一條未知長度的完整行。它返回一個最多隻能容納該行的字符長度最多的字符。 它最初分配一個DEFLEN字符數組來保存字符串 ,如果這個空間不足以容納字符串,它將迭代地 創建一個新的字符串,即CHUNKSZ更大,將舊字符串複製到它 釋放舊字符串,然後從文件 中讀取更多字符並繼續執行,直到可以返回任意長度的整行。
返回值:NULL,如果沒有字符被留在fpin,否則: 指針分配數組至多CHUNKSZ-1個字符長於 miminum需要保持從文件中的任意長的線fpin
int main(int nargs, char *args[])
{
FILE *fpin;
char *getStrFromFile(FILE*);
if (nargs != 2)
{
fprintf(stderr, "USAGE: %s <file>\n", args[0]);
exit(1);
}
fpin = fopen(args[1], "r");
while(1)
{
char *ln;
ln = getStrFromFile(fpin);
if (!ln)
break;
printf("%s", ln);
free(ln);
}
fclose(fpin);
return(0);
}
這是我必須使用的主要方法。這是我迄今所知道的。
char *getStrFromFile(FILE *fpin)
{
char string[DEFLEN];
if(fgets(string, CHUNKSZ, fpin) != NULL) {
int l = lstr(string);
if(string[l-1] = '\n') {
return string;
} else {
int size = 1;
int end = 0;
while (string[l-1] != '\n') {
size += CHUNSZ;
char *s2 = (char*)malloc(sizeof(char)+size);
for(i = 0+end; i < lstr(string); i++) {
s2[i] = string[i];
}
end += lstr(string);
fgets(string, size + end, fpin);
return s2;
哪一部分你不明白嗎? –
'你知道嗎?'是什麼意思?您向我們展示了一些截斷的源代碼。 –
此代碼不起作用。我需要迭代地使用fgets。 CHUNSZ和DEFLEN都是cpp宏定義爲1. – user1784688