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("哈哈哈~~");
}
else
printf("吼吼吼!");
return 0;
}
//运⾏结果是哈哈哈~~
对⽐代码:
int main()
{
if ((int)strlen("abc") - (int)strlen("abcdefgh") > 0)
{
printf("哈哈哈~~");
}
else
printf("吼吼吼!");
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<stdio.h>
#include<assert.h>
void* my_strcpy(char* dest, const char* src)
字符串长度函数c语言{
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<stdio.h>
#include<assert.h>
char* 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;
}
总结
本篇⽂章就到这⾥了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。