1. 程式人生 > >c語言的split字串分割函式strtok的使用

c語言的split字串分割函式strtok的使用

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

具體原始碼可以到這裡下載