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