2012-05-14 107 views
0

我正在使用Zigbee編寫Keil C51。如何過濾c中的數組?

Serial_txString0("AT+UCAST:000D6F0000BB769D=StartGreen");   
tx_port0(0x0D); 

例如,我會收到 「AT +尤卡斯特:000D6f0000BB769D = StartGreen」,我想篩選只得到 「StartGreen」。

回答

4

如何:

char *eq = strrchr(str, '='); 
if (eq) 
    printf("%s\n", eq + 1); 
+0

我是新手整個事情都做了什麼? – JiaYuan

+0

@JiaYuan查找最右邊的'='的指針並打印出來。 – cnicutar

+0

@cnicutar @JiaYuan找到一個指向最右邊'='的指針,遞增一步(到'S'),然後打印它。 –

0

從一個例子,我真的不能告訴基於要過濾什麼事。像這樣的東西就足夠了(提取=之後的部分字符串)?

char* filter(char* input) { 
    int i = 0; 
    while (input[i] && input[i] != '=') i++; 

    return &input[i + 1]; 
} 

請注意,這不會複製字符串,只能引用它的右邊部分。如果你想在<string.h>實際提取過濾部分...

void filter(char* input, char* output) { 
    int i = 0; 
    while (input[i] && input[i] != '=') i++; 

    strcpy(output, &input[i + 1]); 
} 

...使用strcpy

+0

'while(input [i]!='=')i ++;'這個假設字符串將包含'='字符。如果沒有,它將迭代超出空終止,並檢查整個計算機的內存以尋找相當於ASCII碼'='的二進制goo。使用strchr()代替,或編寫檢查空終止的代碼。 – Lundin

+0

@Lundin是的,我意識到這一點,但我認爲他期待'='在那裏。但好的,我相應地改變了它。 – Imp

+0

...所以我現在必須補充一點,如果字符串中不存在'=',這將返回一個空字符串,可能語義上正確。 – Imp