C语言——字符串处理函数str()

发布时间 2023-04-04 21:38:40作者: 长弓令山

1、strtok和strtok_s

 

 1 /*
 2 * strtok_s        :    根据标识符将一个长字符串截断成数个小字符串,原标识符被设置为'\0'(该函数写了原始字符串)。
 3                         若再次调用此函数,并且_string不变,那么截断到的字符串还是上次调用该函数截断到的字符串。
 4                         因为上次调用把第一个标志符置为'\0',字符串结束符,所以不改变_string重复调用该函数,通常情况下没有意义,此特性也被称之为不可再入性。
 5 * _string        :    原字符串指针
 6 * _delimiter    :    标识符,""内部可以有多个标识符
 7 * _context        :    截断后剩余的字符串指针,也就是此次调用函数写入的'\0'后面一字节的指针。
 8                         若是截断到字符串结尾则被赋值成指向字符串结束符'\0'的指针。
 9 * return        :    此次截断的子字符串的指针
10 **/
11 char* __cdecl strtok_s(char* _String, char const* _Delimiter, char** _Context);
12 
13 {
14     /*        test        */
15     char srcStr[256] = "abc,123,def,456";
16     //子字符串
17     char* pch1, * pch2, * pch3;
18     //_Context
19     char* pch = NULL;
20     pch1 = strtok_s(srcStr, ",", &pch);
21     pch2 = strtok_s(pch, ",", &pch);
22     pch3 = strtok_s(pch, ",", &pch);
23     printf("%s\n", pch1);
24     printf("%s\n", pch2);
25     printf("%s\n", pch3);
26 }

 

 

 

 strtok和strtok_s之间的差别在于参数传递和安全性高低。

 1 /*
 2 * strtok        :    根据标识符将一个长字符串截断成数个小字符串,原标识符被设置为'\0'(该函数写了原始字符串)。
 3                         若再次调用此函数,并且_string不变,那么截断到的字符串还是上次调用该函数截断到的字符串。
 4                         因为上次调用把第一个标志符置为'\0',字符串结束符,所以不改变_string重复调用该函数,通常情况下没有意义,此特性也被称之为不可再入性。
 5                         若再次调用strtok,并且_string为Null,则依次向后继续截断此字符串剩余部分。
 6 * _string        :    原字符串指针
 7 * _delimiter    :    标识符,""内部可以有多个标识符
 8 * return        :    此次截断的子字符串的指针
 9 **/
10 {
11     char srcStr[256] = "abc,123,def,456";
12     char* pch1, * pch2, * pch3;
13     pch1 = strtok(srcStr, ",");
14     pch2 = strtok(NULL, ",");
15     pch3 = strtok(NULL, ",");
16     printf("%s\n", pch1);
17     printf("%s\n", pch2);
18     printf("%s\n", pch3);
19 }

 

2023-04-04  21:31:56