ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

深度剖析 string —— strlen strtok

2026/8/13 16:44:40 拓冰建站 浏览量
深度剖析 string —— strlen  strtok 系列文章目录深度剖析strcat strncat深度剖析strchr strstr深度剖析strcmp strncmp深度剖析strcpy strncpy深度剖析strlen strtok深度剖析memcpy memmove深度剖析memset memcmp文章目录系列文章目录前言一、strlen1.调用结构2.使用详解3.源码剖析二、strtok1.调用结构2.使用详解3.源码剖析前言库函数string是我们经常使用也是非常重要的代码我将会对常用的函数的用法和实现原理进行深度剖析一、strlen1.调用结构size_tstrlen(constchar*str);2.使用详解strlen计算字符串的长度原理详解:字符串以’\0’作为结束标志strlen函数返回的是在字符串中’\0’前面出现的字符个数不包含’\0’参数指向的字符串必须要以’\0’结束注意函数的返回值为size_t是无符号的3.源码剖析size_tStrlen(char*str){assert(str);//断言防止传入空指针char*pstr;//创建一个可变指针while(*p);//遍历查找\0returnp-str;//返回两个地址的差}二、strtok1.调用结构char*strtok(char*str,constchar*sep);2.使用详解strtok用于分隔字符串str并删除str中含有sep的字符原理详解:sep参数是个字符串定义了用作分隔符的字符集合第一个参数指定一个字符串它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记strtok函数找到str中的下一个标记并将其用‘\0’结尾返回一个指向这个标记的指针。注:strtok函数会改变被操作的字符串所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。strtok函数的第一个参数不为NULL函数将找到str中第一个标记strtok函数将保存它在字符串中的位置。strtok函数的第一个参数为NULL函数将在同一个字符串中被保存的位置开始查找下一个标记。如果字符串中不存在更多的标记则返回NULL指针。3.源码剖析char*Strtok(char*s,constchar*delim){constchar*spanp;intc,sc;char*tok;staticchar*last;if(sNULL(slast)NULL)return(NULL);/* * Skip (span) leading delimiters (s strspn(s, delim), sort of). * 跳过字符串首部的分隔符 */cont:c*s;for(spanpdelim;(sc*spanp)!0;){if(csc)gotocont;}/* *分割符后面没有字符串了 */if(c0){/* no non-delimiter characters */lastNULL;return(NULL);}toks-1;/*分割符后面还有字符串将tok指向字符串首部不包括分隔符*//* * Scan token (scan for delimiters: s strcspn(s, delim), sort of). * Note that delim must have one NUL; we stop if we see that, too. * 循环字符串中的字符直到找到分隔符或者结束符并替换成结束符 */for(;;){c*s;spanpdelim;/* *判断字符串中的某字符是否是分割符中的字符 *如果是将分隔符替换成结束符并返回tok *如果不是继续判断下一个字符 */do{if((sc*spanp)c){if(c0)sNULL;elses[-1]0;lasts;return(tok);}}while(sc!0);}/* NOTREACHED */}