首页 > 编程知识 正文

strtok函数的用法,c语言strchr函数用法

时间:2023-05-04 17:30:19 阅读:144930 作者:2849

文章头文件函数原型参数返回值注意:使用情况扩展strtok_s和strtok_rstrtok_s函数strtok_r函数以扩展用例。

strtok函数的作用是用指定的字符分割字符串。

头文件

#include string.h

函数原型char*strtok(chars[],const char *delim ); 参数str -要分割成小字符串的字符串。 dlim包含分隔符的c字符串。 返回值函数返回分解后的第一个子字符串,如果没有可获取的字符串,则返回空指针。

注:分割处理后,原始字符串str发生变化,成为第一个子字符串

strtok函数破坏分割前的字符串。 也就是说,每次分割都会减少原始字符串的一部分,破坏完整性。

例如,在第一次拆分之后,原始字符串str是拆分完成后的第一个字符串,而剩下的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时会发生错误

使用情况strtok函数会破坏分解字符串的完整性,调用前和调用后的s已经不同。 要保持原始字符串的完整性,请使用strchr和sscanf的组合等。

# include string.h # include stdio.hint main ({ char str [ 80 ]=' this is-csdn-blog '; const char s[2]='-'; char *token; /*获取第一个子串*/token=strtok(str,s ); /*继续使用其他子字符串*/while(Token!=null(printf('%sn ',token ) ); token=strtok(null,s ); }返回(0; }输出

this is CSDN blog扩展strtok_s和strtok_r strtok_s函数strtok_s是windows下的拆分字符串安全函数,该函数的原型如下:

char*strtok_s(char*strtoken,const char *strDelimit,char **buf ); 此函数通过将剩馀字符串存储在buf变量而不是静态变量中来确保安全性。

strtok_r函数strtok_s函数是用于在linux上拆分字符串的安全函数,该函数声明如下:

char*strtok_r(char*str,const char *delim,char **saveptr ); 该函数也损害了要分解的字符串的完整性,但通过将剩下的字符串保存在saveptr变量中,保证了安全性。

扩大用例: linux C:

# include stdio.h # include stdlib.h # include string.hint main ({ char str [ ]=' ab,cd,ef '; char *ptr; char *p; printf (before strtok : str=% sn ',str ); printf(Begin:(n ) ); ptr=strtok_r(str,',',p ); wile(ptr!=NULL ()//输出时,即使str全部为ab,也会断开连接,破坏分解对象字符串的完整性的printf(str=%sn )、str ); printf(ptr=%s(n ),ptr ); ptr=strtok_r(null,',',p ); }返回0; }输入结果:

before strtok: str=ab,cd,ef begin : str=ab ptr=abstr=ab ptr=CD str=ab ptr=ef

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。