2017-05-25 190 views
-2

達成したいこと:入力を分割して別の配列に入れたいとします。
例:エラー:配列型の式への代入

main.c:19:12: error: assignment to expression with array type

str2[i] = strtok(NULL, "\n"); 
     ^

コード:

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

int main(){ 
    char input[1000], str1[100][1000], str2[100][1000]; 
    int i; 

    for(;; i++){ 
     printf("Enter a day and remainder: "); 
     gets(input); 

     if(strcmp(input, "0") == 0) 
      break; 
     else{ 
      str1[i] = strtok(input," ");//The cause of the error 
      str2[i] = strtok(NULL, "\n"); 
     } 
    } 
    return 0; 
} 

私は、このエラーに関する私の研究を行っている

The user enters: 1337 Hello World 
//Programs split input and store 1337 in str1 and Hello World in str2 

私はこのエラーを作成するコードを持っています。私が学んだことから、varに配列を代入することはできませんが、それは私がやろうとしていることではありません。配列に配列値を代入しています。
私が信じている問題は、strtok機能で、それはchar値として機能すると信じているからです。私がやっていることは、入力を分割して別のvarに入れて配列に入れることですが、それは効率的ではありません。

P.S:私はオーバーフローを防ぐためにfgets()を使用し、gets()を使用していないと言ったコメントを取得します知っています。私はあなたがそのコメントを入れないことをお勧めします。私は先生のために使用する必要がありますが、後で私の使用のために変更されます。

+0

'='の代わりに 'strcpy'(またはなど)を使用します。 – BLUEPIXY

+0

しかし、私は入力を分割し、別の配列に配置したいと思います。 @BLUEPIXY –

+1

そこには変数があります。おそらく、 'strtok'に関するマニュアルページを読んで、それが何を返すのか見てみてください。 'fgets'と' gets'に関しては、そこにそのコメントを使用して、矛盾していますが、あなたはコードにバグがあると考えていません。 – t0mm13b

答えて

0

私のコードの問題は、istrtokを初期化していませんでした。私はvarを宣言するときに0の値を持つと仮定しました。それは1つの間違いであり、配列に配列を割り当てることができないので、strtokのように正しくないと思います。代わりにstrcpyを使用してください。同じ結果が得られます。

+0

あなたはそれがほぼ正しいです。 'strtok()'は、charの配列に代入することができないcharへのポインタを返します。 – SiggiSv

関連する問題