首页 > 编程知识 正文

c语言中strcat的用法,c语言中strlen函数的作用是

时间:2023-05-05 19:38:58 阅读:144946 作者:3634

版权声明:本文是博客的原创文章,未经博客许可不得转载。 3359 blog.csdn.net/Dan 15188387481/article/details/50511699

strtok函数的使用注意事项

函数原型及其基本的APP应用程序strtok函数用于分解字符串,其原型如下:

char*strtok(charstr[],const char *delim );

其中str是要分解的字符串,delim是字符串中用于分解的字符,函数返回分解字符串的第一个指针。 请注意,分解并不是生成新字符串,只是在源字符串上进行加工以改变源字符串。 源字符串发生了变化。

首先从最简单的应用来看下面的例子1。

//例1

#include string.h

Void主() )

{

char s[]=“192.168.0.26”;

char *delim=“.”;

char *p;

printf('%s ',strtok(s ) ) s,delim );

while ((p=strtok null,delim ) ) ) )、p ); printf((n ); }

从例1可以看出,strtok函数的基本用法是:输入字符串数组,就可以根据一定的分隔符(在例1中为'.')将长字符串分割成短字符串。 需要注意的是,如果要拆分长字符串,则在第一次调用中,strtok函数的第一个参数必须传递要拆分的字符串;如果以后再次调用该函数,则strtok函数的第一个参数必须传递空值。 这是因为如果strtok的第一个参数为NULL,则默认情况下函数使用上一个未拆分字符串的未拆分字符串

这个例子是关于最常见的基本应用,但是光知道这些很容易忽视很多细节问题,所以本文将继续讨论值得关注的问题。

注意事项1这里首先要强调的是,strtok函数在进行字符串分解时,其第一个参数,即char str[]发生了变化,如上所述,只是对源字符串做了手脚,即改变了源字符串就示例1中的字符串而言,“192.168.0.26”是源字符串,在调用strtok结束分解后,该字符串为“19201680026”。 其中,红色粗体部分是“.”替换为“”,也就是说,打印或使用字符串结束标志字符,即“192”、“168”、“0”和“26”

在注意事项2中,请注意注意事项1中的源字符串发生了更改,strtok函数原型的第一个参数是字符数组char str[]。 传递参数时参数可以是指针,但如果指针是字符串常量指针,则源字符串将发生更改,因此无法更改字符串常量。 例如,下面的示例2是错误的。

//例2

#include string.h

Void主() )

{

与char * s=“192.168.0.26”//例1的唯一区别是字符串数组变成了字符串常量指针!

char *delim=“.”;

char *p;

printf('%s ',strtok(s ) ) s,delim );

while ((p=strtok null,delim ) ) ) )、p ); printf((n ); }

因此,如果输入是字符串常量指针,则不能直接传递给strtok函数的第一个参数。 虽然可以将此字符串常量指针的内容逐个复制到字符串数组中,然后进行分解,但建议不要这样做。 如果无法使用strtok函数进行字符串分解,则可以使用其他函数(如strstr函数或strchr )进行类似的分解

注意事项如果使用分隔符(strtok函数的第二个参数),则delim中的字符可以用作分隔符,而不是严格匹配。 delim可以理解为分隔符的集合。 这非常重要! 当然,我们在分解字符串时很少使用多个分隔符。 结果,很多人在写例子时只讨论了一个分隔符。 很多人在看例子的时候错误地认识到了delim的作用。

使用注意事项4如果strtok函数分解的字符串的第一个字符是分隔符,strtok函数将忽略第一个字符,并直接从以下分隔符计算: 例如,对于'.192.168.0.26 ',将忽略第一个字符'.',分解的第一个字符串为' 192 '。

总之,strtok函数乍一看很简单,但使用起来有很多细节需要注意,应该理解和掌握。 因为strtok函数不是线程安全的,所以很多时候程序员不用这个函数就能实现自己的字符串分割函数来保证线程安全。 不过,在Linux中定义了strtok_r函数,但该函数是strtok

如果您还有其他意见,请多关照。 谢谢你。

参考资料:

3358 blog.csdn.net/help xs/article/details/6958975作者:君临丶天下

来源: CSDN

译文: 3359 blog.csdn.net/Dan 15188387481/article/details/50511699

声明:本文为博客原创文章。 转载请附上博文链接!

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