C语言字符函数与字符串函数详解
目录
- 本章重点
- 前言
- 1.strlen函数
- 注意点1
- 注意点2
- 2.strcpy
- 注意点1:
- 注意点2:
- 注意点3:
- 注意点4:
- 总结
本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项
1.求字符串长度 strlen
2.长度不受限制的字符串函数 strcpy ,strcat, strcmp
3.长度受限制的字符串函数 strncpy,strncat ,strncmp
4.字符串查找 strstr,strtok
5.错误信息报告 strerror
6.字符操作
7.内存操作函数 memcpy,memmove,memset ,memcmp
前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数。
1.strlen函数
size_t strlen ( const char * str );
- 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
- 参数指向的字符串必须要以 '\0' 结束。
- 注意函数的返回值为size_t,是无符号的( 易错 )
- 学会strlen函数的模拟实现 (计数器、指针-指针、递归)
注意点1
有的编译器可能用int来接收strlen函数的返回值会报错,因为strlen函数返回值是size_t( unsigned int 无符号整型 )
char arr[] = "abcdef"; //错误示范 int sz1 = strlen(arr); //正确示范 size_t sz = strlen(arr);
注意点2
注意函数的返回值为size_t,是无符号的( 易错 )
//3 - 8 < 0?//strlen函数是size_t类型,是无符号的,必定大于0!!!int main(){ if (strlen("abc") - strlen("abcdefgh") > 0) {printf("哈哈哈~~"); } elseprintf("吼吼吼!"); return 0; }//运行结果是哈哈哈~~
对比代码:
int main(){ if ((int)strlen("abc") - (int)strlen("abcdefgh") > 0) {printf("哈哈哈~~"); } elseprintf("吼吼吼!"); return 0; }//运行结果是吼吼吼!
2.strcpy
char* strcpy(char * destination, const char * source );
文章图片
- 源字符串必须以 '\0' 结束。
- 会将源字符串中的 '\0' 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。( 即:不能是不可修改的常量字符串 )
- 学会模拟实现。
注意点1:
我们发现,copy时,将源字符串毫无保留的( 包括末尾的 '\0' )一块copy到目标字符串中!!
文章图片
注意点2:
如果源字符串中间本身就含有'\0',那么我们同样还是取到遇见的第一个‘\0' ,不会继续往后打印的!!!
文章图片
注意点3:
目标空间必须足够大,以确保能存放源字符串。
//错误示范 //目标字符串空间太少 char arr1[] = "xxx"; char arr2[] = "hello\0abc"; strcpy(arr1, arr2);
注意点4:
目标空间必须可变。
文章图片
模拟strcpy函数
代码1:
#include#includevoid* my_strcpy(char* dest, const char* src){ assert(dest && src); char* ret = dest; while (*src) {*dest = *src; dest++; src++; } *dest = '\0'; }int main(){ char arr1[] = "xxxxxxxxxxxxxxxx"; char arr2[] = "abc"; my_strcpy(arr1, arr2); printf("%s", arr1); return 0; }
代码2:(升级版~~)
#include#includechar* my_strcpy(char* dest, const char* src){ assert(dest && src); char* ret = dest; while (*dest++ = *src++) {; } return ret; }int main(){ char arr1[] = "xxxxxxxxxxxxxxxx"; char arr2[] = "abc"; printf("%s", my_strcpy(arr1, arr2)); return 0; }
总结 【C语言字符函数与字符串函数详解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- 字符串拼接成段落,换行符(\n)如何只执行n-1次
- 爬虫数据处理HTML转义字符
- C语言解方程的根和判断是否是闰年