String 如何将calloc创建的内存缓冲区指针传递给子函数?

String 如何将calloc创建的内存缓冲区指针传递给子函数?,string,memory-management,String,Memory Management,这是我的密码: 我必须动态地为字符串Str1创建一些内存,并以递归方式将其指针传递给其他两个函数。代码可以编译,但当它进入Function2时,会生成一个异常,表示无法写入c[i],指针错误?i、 e.它不会写入Str1 我做错了什么 void Function1(void) { char *Str1; Str1 = calloc(25, sizeof(char)); pFileIn = fopen("in.txt", "r"); pFileOut = fope

这是我的密码: 我必须动态地为字符串Str1创建一些内存,并以递归方式将其指针传递给其他两个函数。代码可以编译,但当它进入Function2时,会生成一个异常,表示无法写入c[i],指针错误?i、 e.它不会写入Str1 我做错了什么

void Function1(void)
{
    char *Str1;
    Str1 = calloc(25, sizeof(char));
    pFileIn  = fopen("in.txt", "r");
    pFileOut = fopen("out.txt", "w+");
    if (pFileIn==NULL) printf("Error opening file");
    else
    {
        while (Function2(pFileIn, Str1))
        {
            if (! Function3(pFileOut, Str1))
            {
              fseek(pFileOut, 0, SEEK_END);
              fprintf(pFileOut, "%s", Str1);
              rewind(pFileOut);
            }
        }
        fclose(pFileIn);
        fclose(pFileOut);
}

int Function2(FILE* f, char * c)
{
  int i=0;
  do
  {
      c[i] = fgetc(f);
     if (c[i]==EOF)
        return FALSE;
    } while (c[i++]!='\n');
  c[i] = '\0';
  return TRUE;
}
int Function3(FILE* f, char * c)
{
  char *Str2;
    Str2 = calloc(25, sizeof(char));
  while (Function2(f, Str2))
  {
    if (strcmp(c, Str2)==0)
      return TRUE;
  }

  rewind(f);
  return FALSE;
}

您能保证输入行为24个字符或更短吗?如果行较长,代码将尝试写入坏内存。请尝试getline。否则,如果循环达到max character.int Function2FILE*f,char*c,int n_size{int i=0;do{c[i]=fgetcf;if c[i]==EOF return FALSE;}而c[i++]!='\n'&&i