2013-01-06 18 views
-3

我尝试创建两个函数来拆分字符串成为2部分,第一个函数我想获取字符串“模式1”,从串行端口时RX_IN_CHR_UART变量,填充数据像“模式1 34”,和我想要得到的“34”比较char []与字符串在C“嵌入”

此函数获取字符串第二功能“模式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”?

+0

“不起作用”没有帮助。你需要更具体。 –

+0

你可以使用'strcmp'。或者,相反,由于'dop'返回的指针指向堆栈中的某个东西,这是不合法的,所以您不得不先解决这个问题... – Lindydancer

+1

您的几个错误和未定义的行为在您的码。未定义的行为来自于你返回函数中局部变量的指针。函数返回后,局部变量使用的内存将被系统回收,并且指向它们的指针不再有效。 –

回答

5

了解如何在编译器中启用所有警告。用GCC表示gcc -Wall

编译器应警告您,使用==来比较字符串(特别是与文字字符串)是不正确的。您应该使用strcmp用于这一目的:

if(strcmp(dop(RX_IN_CHR_UART), "34") == 0) { 
+0

这可能对我有帮助,但下一步我会将这个值“34”保存为其他变量作为“pwm”的参考值。 – Adhy

+0

从标签判断,这是Keil 8051 C编译器。上次我不幸使用它时,不仅它有点原始,而且也很麻烦 - 从编译代码的意义上来说,它并不完全符合预期。用可靠的编译器检查代码是一个很好的建议。 – marko

6

使用的strcmp(),而不是==,像你在第一线做。