首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当打印输出时,printf如何知道strtok的标记的结尾?

在C语言中,printf函数是用于将格式化的数据输出到标准输出流(通常是终端)的函数。而strtok函数是用于将字符串分割成一系列子字符串的函数,它使用一个分隔符来确定子字符串的边界。

当printf函数遇到一个字符串参数时,它会按照特定的格式化字符串进行解析,并将相应的数据输出到标准输出流。在解析过程中,如果遇到格式化字符串中的转义字符%,printf函数会根据转义字符后的字符来确定要输出的数据类型,并从参数列表中获取相应的数据。

对于printf函数中的格式化字符串中的转义字符%,如果后面的字符是s,表示要输出一个字符串。而strtok函数返回的是一个指向分割后的子字符串的指针,这个指针指向的是原始字符串中的一段连续字符。由于C语言中的字符串是以null字符'\0'结尾的,所以strtok函数可以通过查找null字符来确定子字符串的结尾。

因此,当printf函数遇到一个字符串参数,并且格式化字符串中的转义字符后面是s时,它会将这个字符串作为参数传递给strtok函数。strtok函数会根据null字符来确定子字符串的结尾,并将这个子字符串输出到标准输出流。

需要注意的是,printf函数并不直接调用strtok函数来确定子字符串的结尾,而是将字符串作为参数传递给strtok函数,由strtok函数来确定子字符串的结尾并返回给printf函数。这样printf函数就可以将分割后的子字符串输出到标准输出流了。

总结起来,当打印输出时,printf函数通过将字符串作为参数传递给strtok函数,并根据strtok函数返回的子字符串来确定分割的结尾,从而实现打印输出分割后的子字符串。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言——字符函数和字符串函数(三)【strtok,strerror,perror】

(当我们了解了strtok返回和注意事项就会理解) 2,注意事项 strtok函数在找到str中下一个标记时候,会将标记用‘\0’结尾(即可能会替换掉这个标记结尾分隔符) 请看 显而易见...,这一次strtok被调用后,找到了第一个标记zhangsan,然后把张三后面的@换成了\0 总之,strtok函数会改变被操作字符串,因此在我们使用strtok分割字符串,可以先把字符串拷贝一份...str中第一个标记,然后以\0将它结尾,并且记住这个标记结束后位置,然后返回一个指向这个标记起始位置指针 继续看上面用到例子: #include #include<string.h...参数1为NULL strtok参数为NULL,函数就会从同一个字符串中被保留位置(即上一个标记结束后位置)开始,查找下一个标记找到标记后,依然是:以\0将这个标记结尾,并且记住这个标记结束后位置...(3)字符串中不存在更多标记 字符串中不存在更多标记时,函数就会返回NULL指针,这也就是为什么上面的例子中for循环进入条件是:ptr !

6410

PHP常见字符串操作函数与用法总结

Another line. ②为打印输出而格式化字符串 printf()结构 $s="world"); printf("Hello %s",$s); 3.改变字符串中字母大小写 函数 描述 使用...2、使用strtok()函数 strtok() 函数把字符串分割为更小字符串(标记)。 语法 strtok(string,split) 参数 描述 string 必需。规定要分割字符串。...正数 – 在字符串指定位置开始 负数 – 在从字符串结尾开始指定位置开始 0 – 在字符串中第一个字符处开始 length 可选。规定被返回字符串长度。默认是直到字符串结尾。...正数 – 从 start 参数所在位置返回长度 负数 – 从字符串末端返回长度 正数 – 在字符串指定位置开始 负数 – 在从字符串结尾开始指定位置开始 0 – 在字符串中第一个字符处开始...规定被返回字符串长度。默认是直到字符串结尾。 正数 – 从 start 参数所在位置返回长度 负数 – 从字符串末端返回长度 <!

47310
  • 【C语言基础】:字符串函数(二)

    ] = { 0 }; strncpy(arr2, arr1, 3); printf("%s\n", arr2); return 0; } 使用strncpy注意事项: 是否将 \0拷贝 首先我们要知道将...第二种情况: str1:abbbcdef\0 str2:bbc\0 这种情况就比较复杂,str1中第一个b和str2中b匹配,str2中第一个和第二个都能匹配上,第三个str2是c,...strtok函数找到str中下⼀个标记,并将其用 \0 结尾,返回一个指向这个标记指针。...strtok函数第一个参数不为NULL ,函数将找到str中第一个标记strtok函数将保存它在字符串中位置。...strtok函数第一个参数为 NULL ,函数将在同一个字符串中被保存位置开始,查找下一个标记。 如果字符串中不存在更多标记,则返回 NULL 指针。

    7410

    因为一个函数strtok踩坑,我被老工程师无情嘲笑了(一)

    strtok函数在提取字符串使用了静态缓冲区,因此,它是线程不安全,多线程同时访问该静态变量,则会出现错误。...额,这样代码我看不下去了,要实现我们必须提前知道一个结构体中究竟包含了几个数据成员,那么有没有合适函数能够代替strtok呢? 有的,它就是strtok_r。...outer_ptr用于标记每个人提取位置,即外循环;inner_ptr用于标记每个人内部每项信息提取位置,即内循环。 strtok_r将原内部指针显示化,提供了saveptr这个参数。...restrict delim,char ** restrict ptr); 在由str指向以空字符结尾字节字符串中查找下一个标记。...分隔符字符由delim指向以空字符结尾字节字符串标识。 该函数被设计为被称为倍数时间以从相同字符串获得连续令牌。 这里大家可以参考,我在这里不多讲了。

    8.7K31

    字符串和内存函数(2)

    字符串函数 strtok函数 strtok函数规则: 1.参数1是指定一个字符串,它包含0个或多个由参数2字符串中一个或多个分隔符分割标记 2.参数2是个字符串...3.strtok函数找到参数1下一个标记,并将其用\0结尾,返回一个指向这个标记指针。...4.strtok函数第一个参数不为NULL,函数将找到参数1中第一个标记strtok将保存它在字符串中位置 5.strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置开始...结合下面的例子: 执行strtok函数后,如下图: 实际上,我们切割并不清楚需要切割几次,因此我们需要通过循环进行切割 分析:很明显,第一次打印abcd。...分析: 原始空间地址大于目标空间地址,我们需要从前往后拷贝原始字符串到目标空间。 否则,我们就需要从后往前进行拷贝,这样就不会因为重叠而导致结果达不到预期。

    9710

    【C】字符函数和字符串函数(下)

    strtok函数找到str中下一个标记,并将其用\0结尾,返回一个指向这个标记指针。...strtok函数第一个参数不为NULL,函数将找到str中第一个标记strtok函数将保存它在字符串中位置。...strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置开始,查找下一个标记。 如果字符串中不存在更多标记,则返回NULL指针。..."; char* str = strtok(buf, p);//函数第一个参数不为空,找到第一个分割符即标记(@),然后将标记改为\0进行结尾,返回指向\0前面部分(ligongwei)指针 就是z...地址 printf("%s\n", str); str = strtok(NULL, p);//strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置(\0)开始,查找下一个标记

    14640

    轻松拿捏C语言——【字符串函数】使用及模拟实现

    • 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。 • 目标空间必须有足够大,能容纳下源字符串内容。 • 目标空间必须可修改。 • 字符串自己给自己追加,如何?...上,大于0返回1,小于0返回-1) 那么如何判断两个字符串?...• strtok函数找到str中下⼀个标记,并将其用\0 结尾,返回⼀个指向这个标记指针。...• strtok函数第⼀个参数不为 NULL ,函数将找到str中第⼀个标记strtok函数将保存它在字符串 中位置。...通俗来讲就是, 第一次使用strtok函数, 在第一个参数指向字符串中去找分隔符sep,找到后把这个分隔符变成\0, 记住\0地址即要查找下一部分起始地址,返回值就是\0前面这部分地址。

    5910

    带你搞清楚strtok函数和strerror函数使用!

    strtok函数找到str中下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记指针。...• strtok函数第⼀个参数不为 比特就业课主页:https://m.cctalk.com/inst/s9yewhfr NULL ,函数将找到str中第⼀个标记strtok函数将保存它在字符串...= NULL; str = strtok(NULL, sep)) { printf("%s\n", str); } return 0; } 我们来看一下这串代码,这串代码作用是将给定192.168.6.111...当我们了解到之后,我来教大家如何去验证它: 但这里会涉及一些我们后面才会学到知识。...,我们打算打开一个文件test.txt,但是我们文件夹里边没有这个文件,所以肯定会打开失败,那么失败=使用strerroer便会得到打开失败原因: 便会这样,没有这个文件。

    9010

    字符串函数、字符函数、内存函数使用及其模拟实现

    函数参数 char * strtok ( char * str, const char * sep ); # char* 函数返回值,strtok函数会找到str中下一个标记,并将其用'\0'结尾,返回一个指向这个标记指针...return 0; } 这里我们知道目标字符串会被分隔符切割为三个字符串,所以这里我们调用了三次strtok函数,但是当我们不知道目标字符串内容,这种方法显然就不能用了;那么我们该如何正确使用strtok...第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割标 记; strtok函数找到str中下一个标记,并将其用 \0 结尾,返回一个指向这个标记指针。...,strtok函数将保存它在字符串中位置; strtok函数第一个参数为 NULL ,函数将在同一个字符串中被保存位置开始,查找下一个标记; 如果字符串中不存在更多标记,则返回 NULL 指针;...strerror 函数功能 C语言有一系列库函数,这些库函数调用失败,会返回相应错误码,而strerror函数作用就是获取错误码对应错误信息首地址,让使用者知道程序发生错误原因。

    1.9K00

    字符函数和字符串函数

    ,它包含了0个或者多个由sep字符串中一个或多个分隔符分割标记          strtok函数找到str中下一个标记,并将其用\0结尾,返回一个只想找个标记指针         strtok...函数第一个参数不为NULL,函数将找到str中第一个标记,strtok函数保存它在字符串中位置.        ...strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置开始,查找下一个标记         如果字符串中不存在更多标记,则返回NULL指针 int main() { char arr...= NULL; ret = strtok(NULL, sep)) printf("%s\n", ret); //ret = strtok(arr2, sep); //printf("%s\n",...ret); //ret = strtok(NULL, sep); //printf("%s\n", ret); //ret = strtok(NULL, sep); //printf("%s\

    7010

    【字符串+内存函数介绍】

    数字 4)那么如何判断两个字符串?...2第一个参数指定一个字符串,它包含了0个或多个由sep字符串中一个或者 多个分隔符分割标记。 3)strtok函数找到str中下一个标记,并将其用’\0’结尾,返回一个指向这个标记指针。...(strtok会改变被操作字符串,所以在使用strtok函数切分字符串一般都是临时拷贝内容并且可修改) 4)strtok函数第一个参数不为NULL,函数将找到str中第一个标记strtok...5)strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置开始,查找下一个标记。 6)如果字符串不存在更多标记,则返回NULL指针。...= NULL; // ret=strtok(NULL, sep)) // { // printf("%s\n", ret); // } } 结果为: 注:出现两个及以上分隔符连在一起

    75500

    C语言----字符函数和字符串函数

    (arr2, arr1)); return 0; } 5.strcat使用和模拟实现 原字符串必须有\0结尾 目标字符串也得有\0,否则没办法知道从哪里开始 目标空间必须足够大,能容纳下字符串内容...2.第一个参数指定了一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割标记 3.strtok函数找到str中下一个标记,并将用\0结尾,返回一个指向这个标记指针。...,strtok函数将保存他在字符串中位置 5.strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置,查找下一个标记。...(NULL, sep); // printf("%s\n", ret2);//输出结果是net // // // return 0; //} //strtok返回值是buf第一个标记指针...指针时会报错,参数位置传入为空字符串,返回值为0; 2.atoi函数会自动过滤开始空白字符; 3.atoi函数会根据字符串内容自动判断整数正负; 4.字符串数字大小超过了整型数字取值范围

    10210

    C语言_字符串和内存函数

    第一个字符串小于第二个字符串,则返回小于0数字。 - 那如何判断两个字符串?...char * strtok ( char * str,const char * sep ); sep参数是个字符串,定义了用作分隔符字符集合 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割标记...strtok函数找到str中下一个标记,并将其用\0结尾,返回一个指向这个标记指针。...strtok函数第一个参数不为NULL,函数将找到str中第一个标记strtok函数将保存它在字符串中位置。...strtok函数第一个参数为NULL,函数将在同一个字符串中被保存位置开始,查找下一个标记。如果字符串中不存在更多标记,则返回NULL指针。

    23520

    C语言:字符函数和字符串函数

    ='\0') //两个指向字符相等时或者str1和str2还没等于\0时候 { //迭代 str1++; str2++; } //两个指向字符不相等 return *str1...3、strtok函数找到str中下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记指针。...4、strtok函数第⼀个参数不为 NULL ,函数将找到str中第⼀个标记strtok函数将保存它在字符串中位置。...5、strtok函数第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存位置开始,查找下⼀个标 记。 6、如果字符串中不存在更多标记,则返回 NULL 指针。...(结束条件) printf("%s\n", str); return 0; }       这里我们可以发现c语言库里strtok函数里面应该有个静态变量, 他调用完后并不会被销毁,所以我们后面传

    11310
    领券