2013-01-06 17 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(),而不是==,像你在第一線做。