strtok、strtok_s、strtok_r 字串分割函數

來源:互聯網
上載者:User

標籤:

1、strtok函數函數原型:char * strtok (char *str, const char * delimiters);參數:str,待分割的字串(c-string);delimiters,分割符字串。 使用方法:該函數用來將字串分割成一個個片段。參數str指向欲分割的字串,參數delimiters則為分割字串中包含的所有字元。當strtok()在參數s的字串中發現參數delimiters中包涵的分割字元時,則會將該字元改為\0 字元。在第一次調用時,strtok()必需給予參數s字串,往後的調用則將參數s設定成NULL。每次調用成功則返回指向被分割出片段的指標。 原理:作用於字串str,以包含在delimiters中的字元為分界符,將str切分成一個個子串;如果,s為空白值NULL,則函數儲存的指標SAVE_PTR在下一次調用中將作為起始位置。 注意:1.使用該函數進行字串分割時,會破壞被分解字串的完整,調用前和調用後的s已經不一樣了。第一次分割之後,原字串str是分割完成之後的第一個字串,剩餘的字串儲存在一個靜態變數SAVE_PTR中,因此多線程同時訪問該靜態變數時,則會出現錯誤。   2.delimiters中包含多字元:GNU C Library中對strtok的功能定義:“Parse S into tokens separated by characters in DELIM”。也就是說包含在delim中的字元均可以作為分隔字元,而非嚴格匹配。可以把delim理解為分隔字元的集合。這一點是非常重要的。   3.如果第一個字元就是分割字元,將自動省略掉
// crt_strtok.c// compile with: /W3// In this program, a loop uses strtok// to print all the tokens (separated by commas// or blanks) in the string named "string".//#include <string.h>#include <stdio.h>char string[] = "A string\tof ,,tokens\nand some  more tokens";char seps[]   = " ,\t\n"; // 字元‘,‘  ‘\t‘  ‘\n‘都作為分割字元char *token;int main( void ){   printf( "Tokens:\n" );    // Establish string and get the first token:   token = strtok( string, seps ); // C4996   // Note: strtok is deprecated; consider using strtok_s instead   while( token != NULL )   {      // While there are tokens in "string"      printf( " %s\n", token );      // Get next token:       token = strtok( NULL, seps ); // C4996   }}

 結果:

Tokens: A string of tokens and some more tokensProgram ended with exit code: 0

 

2、strtok_s函數strtok_s是windows下的一個分割字串安全函數,其函數原型如下:char *strtok_s( char *strToken, const char *strDelimit, char **buf);這個函數將剩餘的字串儲存在buf變數中,而不是靜態變數中,從而保證了安全性。3、strtok_r函數strtok_s函數是linux下分割字串的安全函數,函式宣告如下:char *strtok_r(char *str, const char *delim, char **saveptr);該函數也會破壞帶分解字串的完整性,但是其將剩餘的字串儲存在saveptr變數中,保證了安全性。

strtok、strtok_s、strtok_r 字串分割函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.