2014-12-05 32 views
-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 

回答

0

如果代碼是一樣的,什麼可能改變的是輸入。

在調用函數之前,您可能在輸入流中已經有了新的行字符。在繼續之前,確保前面的代碼消耗所有輸入。

+0

哦哇,它的工作。非常感謝! – Greg 2014-12-05 19:57:23

+0

@Greg你會介意接受答案嗎? – fortran 2014-12-12 16:03:12