-3
我正在編寫處理用戶文本的程序。 首先,我寫了所有功能作爲不同的小程序,只包含main-func和一切正常工作。但是現在彙編所有的代碼被卡住了,因爲一個函數的行爲不同。該函數用於從用戶獲取輸入文本並將其放入動態分配的內存中。當輸入「END」字符串時輸入結束。C代碼的行爲與主函數不同,作爲函數調用
第一是:
#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);
}
和它的工作是這樣的:
input:
aaaa
bbbb
cccc
dddd
eeee
END
output:
0.aaaa
1.bbbb
2.cccc
3.dddd
4.eeee
但是當我試圖使它成爲一個可調用的函數它開始以不同的方式表現。
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
哦哇,它的工作。非常感謝! – Greg 2014-12-05 19:57:23
@Greg你會介意接受答案嗎? – fortran 2014-12-12 16:03:12