-4

文字列を分割して 2 つの部分になる 2 つの関数を作成しようとしました。最初の関数は文字列「Mode 1」を取得したい関数で、RX_IN_CHR_UART 変数の場合はシリアル ポートから「Mode 1 34」のようなデータを入力し、2 番目の関数は取得したい「34」

文字列「Mode 1」を取得するこの関数

    #define GET_MODE_X 6
    #define GET_VALUE 4
    const char RX_IN_CHR_UART[];
        char* pod(char buf_Rx[])
            {
              int i=0;
              char spn[GET_MODE_X]; // 7
              for(i=0;i<GET_MODE_X;i++)
              {
                spn[i] = buf_Rx[i];
              }
              return Get_mode_x = spn;
            }

そして、この関数は文字列「34」を取得します

char* dop(char buf_Rx_val[])
{
   int k=0; 
   char datasip[GET_VALUE]; //2       
   for(k=0;k<GET_VALUE;k++)
   {
     datasip[k] = buf_Rx_val[GET_MODE_X+k+1];
   }
   return (Get_val_mod = datasip);
}

関数のdop()使用を比較しようとすると、機能if(dop(RX_IN_CHR_UART)=="34")しません。

 if(!strcmp(mode1,pod(RX_IN_CHR_UART))) // compare "Mode 1"
   {
      Send_teks("Mode 1 ->:"); // send to serial port
      Send_teks(pod(RX_IN_CHR_UART));
      Send_Char('\n');
      Send_teks("Data yang dimasukkan ->:");
      Send_teks(dop(RX_IN_CHR_UART));
      Send_Char('\n');
      if(dop(RX_IN_CHR_UART) == "34") // doesn't work well
      {
        pwm_off();
        LCD_command(0x85);
        LCD_sendstring("Kipas off  ");
        Send_teks("Sukses");
        Send_Char('\n');
        Send_teks("Kipas Off");
        Send_Char('\n');
      }
  }

dop() を "34" と比較するには、この関数をどうすればよいですか?

4

2 に答える 2

6

最初の行で行ったように、== の代わりに strcmp() を使用します。

于 2013-01-06T19:52:01.953 に答える
5

コンパイラですべての警告を有効にする方法を学びます。GCC では、つまりgcc -Wall.

==コンパイラは、文字列 (特にリテラル文字列と) を比較するために使用するのは正しくないことを警告する必要があります。strcmpその目的のために使用する必要があります:

  if(strcmp(dop(RX_IN_CHR_UART), "34") == 0) { 
于 2013-01-06T19:51:55.000 に答える