C語言 strtok 字串分割

2021-07-30 05:48:46 字數 2010 閱讀 6880

參考:

c++ 字串分割方法 實現split:

使用函式strtok可實現c語言環境下的字串分割

cstring:strtok

函式:

char * strtok ( char * str, const char * delimiters );
引數:

功能:分割字串

例程:

#include #include #include int main(int argc, char* argv) 

printf("str: %s\n", str);

system("pause");

return 0;

}

結果:

問題1:經過分割後,字串str不再和原先一致

封裝了乙個函式:

#include #include #include #define in

#define out

typedef struct split splitinfo;

void getsplitstring(in char* str, in char* delim, out splitinfo* splitinfo)

splitinfo* in = (splitinfo*)malloc(sizeof(splitinfo));

strcpy(in->info, next);

in->next = null;

top->next = in;

top = in;

n++;

while (next = strtok(null, delim))

splitinfo->num = n;

}void splitfree(splitinfo* splitinfo)

splitinfo->next = null;

splitinfo->num = 0;

}int main(int argc, char* argv)

splitinfo splitinfo;

splitinfo.next = null;

getsplitstring(str, " ,.-", &splitinfo);

splitinfo* top = &splitinfo;

for (int i = 0; i < splitinfo.num; i++)

splitfree(&splitinfo);

printf("str: %s\n", str);

// ----

char str2 = "hello world";

getsplitstring(str2, "hello world", &splitinfo);

top = &splitinfo;

for (int i = 0; i < splitinfo.num; i++)

splitfree(&splitinfo);

printf("str2: %s\n", str2);

system("pause");

return 0;

}

結果:

問題2:輸入引數str應該為陣列而非字串?

參考:c語言中strtok函式進行分割字串!

但是在封裝後的函式中輸入字串同樣可以執行,這裡還沒太搞懂字串和陣列的區別,以及實參和形參的轉換,等待以後搞懂

問題3:函式strtok是非執行緒安全的函式?

linux環境下,可以使用函式strtok_r來代替

strtok(分割字串)

strtok 分割字串 表頭檔案 include 定義函式 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串,當strtok 在引數s的字串中 發現到引數delim的分割字元...

C語言strtok 函式 字串分割

標頭檔案 include 函式定義 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim 則為分割字串,當strtok 在引數s 的字串中發現到引數delim的分割字元時則會將該字元改為 0...

C語言strtok 函式 字串分割

標頭檔案 include 定義函式 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s 指向欲分割的字串,引數delim 則為分割字串,當strtok 在引數s 的字串中發現到引數delim 的分割字元時則會將該字元改為...