c语言中关于字符与字符串的库函数

目录

求字符串长度

strlen

完整形态

作用

注意事项

长度不受限制的字符串函数

strcpy

完整形态

作用

注意事项

strcat

完整形态

作用

注意事项

strcmp

完整形态

作用

注意事项

长度受限制的字符串函数介绍

strncpy

完整形态

作用

注意事项

strncat

完整形态

作用

注意事项

strncmp

完整形态

作用

注意事项

字符串查找

strstr

完整形态

作用

注意事项

strtok

完整形态

作用

注意事项

错误信息报告

strerror

完整形态

作用

注意事项

内存操作函数

memcpy

完整形态

作用

注意事项

memcmp

完整形态

作用

注意事项

memset

完整形态

作用

注意事项

结尾


本章重点介绍处理字符和字符串的库函数的使用和注意事项

求字符串长度


strlen
完整形态

size_t strlen ( const char * str );

作用

用来计算字符串'\0'之前的字符个数

注意事项

1.strlen的返回类型是size_t(无符号整型),直接使用该类型的数据进行计算时可能会出现错误

2.确保str字符串里有'\0'

3.strlen形参*前有const,源字符串str不会改变


长度不受限制的字符串函数


strcpy
完整形态

char* strcpy(char * destination, const char * source );

作用

将source的字符串拷贝到destination里('\0'也会拷贝过去)

注意事项

1.确保source里有'\0'

2.destination的空间必须足够大(起码可以容纳拷贝的内容)

3.destination的空间必须可变

4.source形参*前有const,源字符串不会改变


strcat
完整形态

char * strcat ( char * destination, const char * source );

作用

将source的字符串追加到destination字符串末尾并添加'\0'

注意事项

1.destination的空间必须足够大(起码可以容纳追加后的字符串的内容)

2.destination的空间必须可变

3.destination与source的字符串内必须有’\0‘

4.source形参*前有const,源字符串不会改变

5.不可以字符串自己给自己追加

strcmp
完整形态

int strcmp ( const char * str1, const char * str2 );

作用

比较两个字符串的大小(比较的原理是比较字符的ASCII码值的大小)

例:比较abd与abcdqwertyuijhgfdsdfghjk...(超级长)

先比较双方第一个字符a的大小,相等,再比较双方字符第二个字符b的大小,想等,再比较双方第三个字符c和d的大小,很好,d的ASCII码值大于c的ASCII码值,so,abd更大

str1>str2返回大于0的数字

str1=str2返回0

str1<str2返回小于0的数字

注意事项

1.str1和str2字符串结尾处都必须有'\0'作为结束标志

2.str1和str2前都有const修饰,源字符串不会改变

3.不同编译环境返回值有所不同,但是正负必定相同

长度受限制的字符串函数介绍


strncpy
完整形态

char * strncpy ( char * destination, const char * source, size_t num );

作用

拷贝num个字符从source到destination(如果source字符串的长度小于num,则拷贝完source字符串之后,在目标的后边追加0,直到num个)

注意事项

1.注意destination的空间大小,如果不足以容纳追加的source字符串,则会发生截断

2.在追加后不会补'\0',如有需要则需手动补充

3.source形参*前有const,源字符串不会改变

4.destination的空间必须可变

strncat
完整形态

char * strncat ( char * destination, const char * source, size_t num );

作用

用于将source字符串的前 n 个字符连接到destination字符串的末尾

注意事项

1.destination的空间必须足够大(剩余空间至少为n+1,起码可以容纳source字符串和'\0')

2.destination的空间必须可变

3.返回值为拼接后字符串destination的地址

4.source形参*前有const,源字符串不会改变

strncmp
完整形态

int strncmp ( const char * str1, const char * str2, size_t num );

作用

用于比较字符串str1和字符串str2的前 n 个字符是否相等(比较规则同strcmp函数,不过增加了比较的字符串长度限制)

注意事项

1.比较的是两个字符串的前 n 个字符,当 n 大于等于两个字符串的长度时,比较将涵盖整个字符串。如果 n 小于两个字符串的长度,则只比较两个字符串的前 n 个字符。

2.str1和str2前都有const修饰,源字符串不会改变

3.不同编译环境返回值有所不同,但是正负必定相同

字符串查找


strstr
完整形态

char * strstr ( const char *str1, const char * str2);

作用

str1是要搜索的目标字符串,str2 是要查找的子字符串。strstr 函数会在目标字符串中查找子字符串的第一次出现,并返回一个指向该位置的指针。如果子字符串没有在目标字符串中找到,返回值为 NULL

注意事项

1.strstr 函数区分大小写,如果要进行大小写不敏感的搜索,可以使用其他方法

2.str1和str2前都有const修饰,源字符串不会改变

strtok
完整形态

char * strtok ( char * str, const char * sep );

作用

将字符串拆分成多个子字符串

strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针

strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置

strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标

如果字符串中不存在更多的标记,则返回 NULL 指针

注意事项

1.在每次调用 strtok 后,函数会修改原始字符串,将分隔符替换为字符串结束符 \0

2.strtok使用时注意参数,一般会多次调用,后面调用的时候需传NULL

错误信息报告


strerror
完整形态

char * strerror ( int errnum );

作用

将错误码转换为相应的错误消息字符串

注意事项

1.strerror 函数根据当前系统的语言环境返回错误消息,所以可能会因系统而异

内存操作函数


memcpy
完整形态

void * memcpy ( void * destination, const void * source, size_t num );

作用

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置

注意事项

1.函数复制时是按照字节逐一复制的

2.内存重叠的时候,使用本函数会发生一些意想不到的效果

3.返回值是目标空间的起始地址

4.这个函数在遇到 '\0' 的时候并不会停下来

memcmp
完整形态

void * memmove ( void * destination, const void * source, size_t num );

作用

效果同上(如果源空间和目标空间出现重叠,就得使用memmove函数处理)

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的

注意事项

1.memove可以说是优化版的memcpy

memset
完整形态

int memcmp ( const void * ptr1,const void * ptr2,size_t num );

作用

比较从ptr1和ptr2指针开始的num个字节

注意事项

1.按照字节进行比较

2.确保字节数正确

3.比较规则参考strcmp

4.memcmp 函数对空指针是安全的,即可以传入空指针作为参数。当其中一个指针为空时,返回的结果可能是不确定的

结尾

感谢认真观看完全文,如有发现错误,请指出,作者校正后会加以改正

这篇文章不是很满意(上一篇还是挺满意的),本来打算做的模拟实现和代码举例都没有做,后面内存函数也是草草了事,这篇文章就当简单了解一下这些函数吧

最后,祝各位道友早日突破/进阶

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值