字符串切分函數:strtok與strtok_r

strtok函數

    函數原型:char *strtok(char str[], const char *delim)。

    功能:分解字符串爲一組字符串,str爲要分解的字符串,delim爲分割符。

    說明:函數strtok()將一字符串按指定分割符切分爲子串。當strtok在原串str中發現分割符delim時,將該字符轉換爲'\0'(字符串的結尾     符)。 在第一次調用時,strtok()函數必須將原串str作爲第一個參數,後繼的調用則將第一個參數設置爲NULL。每次調用成功則返回指向     被切分片段的指針。

    返回值:從str首部開始的依次被切分出來的字符串,當沒有被分割的串時,返回NULL。 所有的delim字符將被過濾掉。

    C語言示例

/**
 * test.c
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	char str[] = "i am a beautiful girl";
	char *ptr = NULL;
	ptr = strtok(str, " ");
	while (ptr != NULL)
	{
		printf("%s\n", ptr);
		ptr = strtok(NULL, " ");
	}
	exit(0);
}
需注意:strtok()函數不是線程安全的,函數將每次調用後的字符串位置保存在一個函數內部的靜態局部變量中,如果有多個線程調用這個函數,有可能出現衝突。


strtok_r函數

    函數原型:char *strtok_r(char s[], const char *delim, char **saveptr);

    說明:strtok_r()函數自定義指針來指向切分出的字符串,需傳入參數saveptr,它是線程安全的。

C示例代碼

/**
 * test_r.c
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	char str[] = "i am a handsome boy";
	char *ptr = NULL;
	char *saveptr = NULL;
	ptr = strtok_r(str, " ", &saveptr);
	while (ptr != NULL)
	{
		printf("%s\n", ptr);
		ptr = strtok_r(NULL, " ", &saveptr);
	}
	exit(0);
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章