[英]Using fgets + dynamic memory allocation
我有一個家庭作業問題,需要幫助。 我需要實現一個功能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;
這是不正確的。
if(string[l-1] = '\n')
一定是
if(string[l-1] == '\n')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.