C語言中strtok函式進行分割字串!

2021-09-30 06:05:22 字數 1613 閱讀 7591

函式原型:char *strtok(char *s, char *delim);

函式功能:把字串s按照字串delim進行分割,然後返回分割的結果。

函式使用說:

1.strtok函式的實質上的處理是,strtok在s中查詢包含在delim中的字元並用null(』/0′)來替換,直到找遍整個字串。這句話有兩層含義:(1)每次呼叫strtok函式只能獲得乙個分割單位。(2)要獲得所有的分割單元必須反覆呼叫strtok函式。

2.strtok函式以後的呼叫時的需用null來替換s.

3.形參s(要分割的字串)對應的變數應用char s=」….」形式,而不能用char *s=」….」形式。

例子如下:

#include

#include

int main(void)

char buf=」golden global view」;

char* token = strtok( buf, " ");

while( token != null )

printf( 」%s 「, token );

token = strtok( null, 」 「);

return 0;

其結果為:

golden

global

view

但是如果我們把char buf=」golden global view」;換成char *buf=」golden global view」; 則會出錯,原因是如果分配的大小一樣的前提下char *p和char b也是有區別的,

char *p="abc";

char b="abc";

當這兩個語句編譯後,編譯器會將「abc」放在常量區中,而strtok(char *s, char *delim)函式是在s中查詢包含在delim中的字元並用null(』/0′)來替換,直到找遍整個字串。這句話就能體現指標和陣列的區別:既然查詢就要p++/b++。 要替換成(『/0』),那麼就要對*p/*b賦值

*p='/0';

*b='/0';

p指標是指向常量字串的,對*p操作就是對字串操作,這顯然會編譯不通過的。

b是字元陣列的首位址,這個陣列裡面的元素是『a』、'b'、'c'、'/0',和字串「abc」看上去是一樣,不過並不是同乙個。相當於,b陣列裡可以存放其他東西'1'、'2'、'3'、'/0',只不過在編譯到char b="abc";後給這個b陣列裡的元素值改變了,所以對*b的操作並不影響字串。

如果我們把token = strtok( null, 」 「);換成token = strtok( buf, " ");則while迴圈會成為乙個無限迴圈,而輸出的結果就只為:golden。我的解釋原因如下: 在strtok函式體中有乙個char 型別的指標(假設為 char *p),它的作用就是令p=s,用於儲存s的起始位址。由於在隨後的處理中指標p的值會一直儲存(c語言中指標的特點),因此在以後的strtok呼叫中用null來代替s的原因就是防止p被重新賦值而指向s的起始位址,從而可以保證p可以指向s的其他位置,直到最後分割完整個字串。 但是如果用s來代替null,那麼每次呼叫strtok時,p就會指向s的初始位址,從而只能獲得第乙個分割出來的字串,如上面的例子中while會是乙個無限迴圈,而輸出的結果只能是「golden」。

C語言中的strtok函式用法

strtok函式是string.h庫中的函式 原型 char strtok char s,const char delim strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串中包含的所有字元。當strtok 在引數s的字串中發現引數delim中包涵的分割字元...

c語言中strtok的使用

函式 1 strtok char strtok char str,const char delim 功能 分割字串 引數 str 要分割的字串 delim 分割的標誌 返回值 成功 子字串指標 失敗 null include include int main int argc,const char ...

C語言中的字串分割函式 strtok

c語言中的字串分割函式char strtok char s,const char delim 函式用於分解字串為一組字串。s 為要分解的字串,delim 為分隔符字串,從 s 開頭開始的乙個個被分割的串,當沒有被分割的串時則返回null。用法說明 首先需要新增第一次呼叫strtok函式時,這個函式將...