-4

我尝试创建两个函数将字符串拆分为 2 部分,第一个函数我想从串口获取字符串“模式 1”,当RX_IN_CHR_UART 变量时,填充数据如“模式 1 34”,第二个函数我想获取“34”

此函数获取字符串“模式 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 回答