C代码作为主函数和被调用函数的行为不同

C代码作为主函数和被调用函数的行为不同,c,function,pointers,dynamic-allocation,C,Function,Pointers,Dynamic Allocation,我正在写一个程序来处理用户的文本。 首先,我将所有函数编写成不同的迷你程序,只包含main func,所有功能都运行得很好。但是现在,由于一个函数的行为不同,我在汇编所有代码时遇到了麻烦。此函数用于从用户处获取输入文本,并将其放入动态分配的内存中。输入结束字符串时,输入结束 首先是: #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char** text =

我正在写一个程序来处理用户的文本。 首先,我将所有函数编写成不同的迷你程序,只包含main func,所有功能都运行得很好。但是现在,由于一个函数的行为不同,我在汇编所有代码时遇到了麻烦。此函数用于从用户处获取输入文本,并将其放入动态分配的内存中。输入结束字符串时,输入结束

首先是:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  char** text = NULL;
  int i,j,flag=1;
  int count_strings;
  char c;

  for(i=0;flag;i++)
  {
    text = (char**)realloc(text,sizeof(char*)*(i+1));
    *(text+i) = NULL;
    c = 0;
    for(j=0;c!='\n';j++)
    {
      c = getchar();
      *(text+i) = (char*)realloc(*(text+i),sizeof(char)*(j+1));
      *(*(text+i)+j) = c;
    }
    *(*(text+i)+j-1) = ' ';
    *(*(text+i)+j) = '\0';

    if(strcmp(*(text+i),"END ")==0)
    {
      flag = 0;
      free(*(text+i));
    }
  }
  count_strings = i-1;

  for(i=0;i<count_strings;i++)
  {
    printf("%d.%s\n",i,*(text+i));
    free(*(text+i));
  }
  free(text);
}
但当我试图使它成为一个可调用函数时,它开始以不同的方式运行

char** text_input(int* count_strings)
{
  char** text = NULL;
  int i,j,flag=1;
  char c;

  for(i=0;flag;i++)
  {
    text = (char**)realloc(text,sizeof(char*)*(i+1));
    *(text+i) = NULL;
    c = 0;
    for(j=0;c!='\n';j++)
    {
      c = getchar();
      *(text+i) = (char*)realloc(*(text+i),sizeof(char)*(j+1));
      *(*(text+i)+j) = c;
    }
    *(*(text+i)+j-1) = ' ';
    *(*(text+i)+j) = '\0';

    if(strcmp(*(text+i),"END ")==0)
    {
      flag = 0;
      free(*(text+i));
    }
  }
  *count_strings = i-1;
  for(i=0;i<*count_strings;i++)
    printf("%d.%s\n",i,*(text+i));
  return(text);
}

如果代码是相同的,那么可能改变的是输入

在调用函数之前,输入流中可能已经有一个新行字符。在继续之前,请确保前面的代码使用了所有输入

char** text_input(int* count_strings)
{
  char** text = NULL;
  int i,j,flag=1;
  char c;

  for(i=0;flag;i++)
  {
    text = (char**)realloc(text,sizeof(char*)*(i+1));
    *(text+i) = NULL;
    c = 0;
    for(j=0;c!='\n';j++)
    {
      c = getchar();
      *(text+i) = (char*)realloc(*(text+i),sizeof(char)*(j+1));
      *(*(text+i)+j) = c;
    }
    *(*(text+i)+j-1) = ' ';
    *(*(text+i)+j) = '\0';

    if(strcmp(*(text+i),"END ")==0)
    {
      flag = 0;
      free(*(text+i));
    }
  }
  *count_strings = i-1;
  for(i=0;i<*count_strings;i++)
    printf("%d.%s\n",i,*(text+i));
  return(text);
}
input:
aaa
bbb
ccc
ddd
eee
END
output:
0. 
1.aaa 
2.bbb 
3.ccc 
4.ddd 
5.eee