如何计算malloc和fgets参数的字节数和字符数?

时间:2017-10-21 19:22:31

标签: c

功能原型

int rows(int *n);
void filedata(int numr, char *name[]);

函数调用

int main(void)
{
  int numberofrows;
  char *name[10]; 
  rows(&numberofrows);
 filedata(numberofrows,name);

  for(int i=0;i<numberofrows;i++)
   {
     puts(name[i]);
   }

}    

第一个功能正常工作,然后计算文件中的行数

  int rows(int *n)
 { 
    FILE *infile; 
    char ch;
    int count=0;  
    infile=fopen("data","r"); 

   if(infile==NULL) 
        { 
           printf("File not Found"); 
        } 
    else 
      {    
        for(ch=fgetc(infile);ch!=EOF;ch=fgetc(infile))
          { 
            if(ch=='\n')
             {
              count=count+1;
             } 
          }     

           fclose(infile);        

     } 
          *n=count; 
 }

第二个函数为每一行动态分配内存。但该计划不起作用。我不明白为什么?有人可以指出错误并解释以下代码中缺少的内容吗?

 void filedata(int numr,char *name[])
{
    FILE *infile; 

    infile=fopen("data","r"); 

    if(infile==NULL) 
      { 
        printf("File not Found"); 
      }

  else
    {  
        for(int i=0;i<numr;i++)
          {
               name[i]=malloc(Number of bytes?);
               fgets(name[i],Number of characters?,infile);
           }

    }                   
}

1 个答案:

答案 0 :(得分:0)

你需要为你想要阅读的每一行分配内存。除此之外,我建议不要只读一个字符来查看是否达到文件末尾。通过一些轻微的调整,您的代码可能如下所示:

function client(firstName, ... ,  familyNotes) { // no brackets after familyNotes