2017-12-21 14 views
-3

から文字列配列を返す方法:C言語:だから私は、このユーザ入力持っている機能

char usercommand[512]; 
fgets(usercommand, 512, stdin); 

を、私はスペースでこの行を分割し、私のarrayを移入します。 だから私はこのarrayています

char arguments[2]; 

そしてこのfunction

void parseuserinput(char *c, char *arr) 
{ 
    int i = 0; 
    char * pch; 
    pch = strtok(c, " "); 
    while (pch) 
    { 
     arr[i] = pch; 
     i++; 
     pch = strtok(NULL, ""); 
    } 
} 

使用法:私は私のfunction parseuserinputを見ることができますが

parseuserinput(usercommand, arguments); 

そして、私のarrayはまだ空です要素を私のに挿入する0。

+0

1) 'char arguments [2];'が小さすぎます。 2) 'parseuserinput()'は '' arr'を終える文字をヌル文字ではありません。 3) "私の配列はまだ空です" - >それを示すコードを投稿する4)ポスト入力が使用されています。 – chux

+0

2要素で十分です –

+3

'char * arguments [2];を意味しましたか? – AntonH

答えて

1

ポインタ値をタイプcharの変数に格納しています。次に、文字列の部分を指しています。考えられる解決策は、char* arguments[2]を使用し、次にstrdup()を使用して文字列を複製し、複製された文字列のアドレスをchar *[]に格納することです。ここで

void parseuserinput(char *c, char *arr[]) 
{ 
    int i = 0; 
    char * pch; 
    pch = strtok(c, " "); 
    while (pch) 
    { 
     arr[i] = strdup(pch); 
     ... 
    } 
} 

、我々はpchし、それを保存することによって指さトークン化stringのそれぞれが重複しています。 char*の配列は、配列の最初の要素へのポインタに壊れていて、それを変更することができ、の値を返してを実現することができます。

そして、char*[]のいくつのポジションが満たされていますか? iをインクリメントしています。このiは、正しく充填されたchar*配列の要素数を示します。関数から返すことで、正確に埋められた要素の数に関する呼び出し先関数にアイデアを与えることができます。

int parseuserinput(char *c, char *arr) 
{ 
    ... 
    return i; 
} 

strdup - 戻り値をチェックして、作業を終えたら解放してください。