C语言——字符串处理函数str()
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