c語言的split字串分割函式strtok的使用
阿新 • • 發佈:2019-01-03
c語言也有類似其他語言的split字串分割函式,就是strtok
標頭檔案:#include <string.h>
定義函式:char * strtok(char *s, const char *delim);
函式說明:strtok()用來將字串分割成一個個片段。引數s 指向欲分割的字串,引數delim 則為分割字串,當strtok()在引數s 的字串中發現到引數delim 的分割字元時則會將該字元改為\0
字元。在第一次呼叫時,strtok()必需給予引數s 字串,往後的呼叫則將引數s 設定成NULL。每次呼叫成功則返回下一個分割後的字串指標。
返回值:返回下一個分割後的字串指標,如果已無從分割則返回NULL。
示例程式碼:
//用逗號做分隔符,讀出內容 // char s[] = "123-sldkf-123ls-343434-dfjdlkfj-dflcmvn"; char *delim = ","; char *p,*tmp; uint32_t tx[3]; int i = 0; uint32_t count; uint8_t r_data; if(strstr(send_msg,"{") == NULL){ continue;//如果不包含左大括號"{",則認為不是陣列,跳出迴圈讀下一行。 } p = strtok(send_msg, delim); i=0; #if DEBUG printf("%s", p); #endif tmp = strstr(p,"0b") + 2;//ad9631.txt原始資料格式:{0b1,0x000,0x00},0b後才是數字 tx[i] = atoi(tmp); #if DEBUG printf("(0x%x) ", tx[i]); #endif i++; while((p = strtok(NULL, delim))){ #if DEBUG printf("%s", p); #endif if(i == 1){ tmp = strstr(p,"0x") + 2;//ad9631.txt原始資料格式:{0b1,0x000,0x00},第二個數0x後才是數字 tx[i] = atoD(tmp,16); #if DEBUG printf("(0x%x) ", tx[i]); #endif } if(i == 2){ tmp = strstr(p,"}") - 2;//ad9631.txt原始資料格式:{0b1,0x000,0x00},第三個數}前兩個位元組才是數字 tx[i] = atoD(tmp,16); #if DEBUG printf("(0x%x)\n", tx[i]); #endif } i++; if(i>=3) break; } #if DEBUG printf("\n"); #endif
具體原始碼可以到這裡下載