0

データを連続して char *buffer に読み込みました。次に、その *buffer 内の文字列を取得して、多次元配列にコピーする必要があります。

そのため、バッファからの最初のデータは temp_message[0] に移動し、バッファからの 2 番目の読み取りは temp_message[1] に移動します。

文字列/データの長さは 10 です....それが temp_message[4][10] を宣言した理由です。

私のコード:

  char temp_message[4][10];
  //receiving....
  for(i=0;i<IR_COM_NUMBER;i++) {
    if (wb_receiver_get_queue_length(receiver[i]) > 0) {

        /* read current packet's data */
        ***const char *buffer = wb_receiver_get_data(receiver[i]);***
        count[i]=0;
        if (message_printed[i] != 1) {
          ***temp_message[i][]=buffer;***
          /* print null-terminated message */
          printf("Communicating: received \"%s\" from receiver %d \n",buffer,i);
          message_printed[i] = 1;
        }
        /* fetch next packet */
        wb_receiver_next_packet(receiver[i]);
        message_printed[i]=3;
      } else {
        count[i]++;
        if (message_printed[i] !=2 && count[i]>20) {
          printf("Communication broken from receiver %d!\n",i);
          message_printed[i] = 2;
        }
      }
  }
4

2 に答える 2

1

関数を使用して、文字列を文字列配列strcpyにコピーします。buffertemp_message

strcpy(temp_message[i], buffer);

私はあなたの質問に1つの考えられる落とし穴を見つけました。文字列/データの長さが10であると書いていますが、末尾を考慮しています\0か?

于 2013-03-23T08:32:50.520 に答える
1

temp_message 配列の 1 つを指定する場合、2 番目の[]演算子は無効です。それがコンパイラエラーの理由です。strcpyまたはを使用memcpyして、文字配列から文字をコピーします。

strcpy(temp_message[i], buffer);

strcpybufferの内容が NULL で終了する場合は、ここで適切です。

于 2013-03-23T08:30:10.260 に答える