我有一个需要帮助的家庭作业问题。我需要实现一个功能char *getStrFromFile(FILE*);
。我只是不明白。我试图弄清楚这个问题。
此函数从 fpin 指向的打开文件中安全地读取未知长度的完整行。它返回的行最多比保持该行所需的最小值长 CHUNKSZ-1 个字符。它最初分配一个 DEFLEN 字符数组来保存字符串,如果这个空间不足以保存字符串,它会迭代地创建一个 CHUNKSZ 更大的新字符串,将旧字符串复制到它释放旧字符串,然后读取从文件中输入更多字符,并继续此操作,直到可以返回任意长度的整行。
返回:如果 fpin 中没有剩余字符,则返回 NULL,否则:指向已分配数组的指针至多 CHUNKSZ-1 个字符长于从文件 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;