我有一个需要帮助的作业问题。我需要实现一个函数char *getStrFromFile(FILE*);
。我只是不明白它。我试图弄清楚这个问题。
此函数可安全地从中读取未知长度的完整行 fpin指向的打开文件。它返回一条最多为CHUNKSZ-1的行 字符长度超过保持线所需的最小值。 它最初分配一个DEFLEN字符数组来保存字符串, 如果这个空间不足以容纳字符串,它将反复进行 创建一个更大的CHUNKSZ字符串,将旧字符串复制到它 释放旧字符串,然后从文件中读取更多字符, 并继续这一直到可以返回任意长度的整行。
RETURNS:如果fpin中没有留下任何字符,则为NULL,否则: 指向最多CHUNKSZ-1字符的分配数组的指针 从文件fpin中保留任意长行所必需的miminum
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;
答案 0 :(得分:5)
这不正确。
if(string[l-1] = '\n')
一定是
if(string[l-1] == '\n')