我是靠谱客的博主 酷酷小蘑菇,最近开发中收集的这篇文章主要介绍常考字符串函数,内存函数总结大全求字符串长度长度不受限制的字符串函数长度受限制的字符串函数介绍字符串查找错误信息报告字符分类函数内存操作函数,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 求字符串长度
- strlen
- 长度不受限制的字符串函数
- 1.strcpy
- 2.strcat
- 3.strcmp
- 长度受限制的字符串函数介绍
- 1.strncpy
- 2.strncat
- 3.strncmp
- 字符串查找
- 1.strstr
- 2.strtok
- 错误信息报告
- strerror
- 字符分类函数
- 内存操作函数
- 1.memcpy
- 2.memmove
- 3.memcmp
求字符串长度
strlen
size_t strlen ( const char * str );
1.字符串已经 ‘ ’ 作为结束标志,strlen函数返回的是在字符串中 ‘ ’ 前面出现的字符个数(不包含 ‘ ’ )。
2.参数指向的字符串必须要以 ‘ ’ 结束。
3.注意函数的返回值为size_t,是无符号的( 易错 )
#include<stdio.h>
#include<string.h>
int main()
{
if (strlen("abc") - strlen("abcdef") > 0)
{
printf(" > n");
}
else
{
printf(" < n");
}
}
// 输出结果为 >
由于strlen函数的返回值类型为size_t , 两个无符号整形相减得到的仍是无符号数 , -3被当成无符号数,补码即为原码,最高位为数值位 , 是一个很大的正数,所以输出结果为 >
4.模拟实现
// 第一种
size_t my_strlen(const char* str)
{
assert(str);
size_t count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
// 第二种
size_t my_strlen(const char* str)
{
assert(str);
const char* eos = str;
while (*str)
{
str++;
}
return str - eos;
}
// 第三种
size_t my_strlen(const char* str)
{
assert(str);
return (*str) ? 1 + my_strlen(str + 1) : 0;
}
长度不受限制的字符串函数
1.strcpy
char* strcpy(char* destination,const char* source);
功能:
strcpy函数将strSource(包括终止的空字符)复制到strDestination指定的位置。复制或追加字符串时不执行溢出检查。如果源字符串和目标字符串重叠,strcpy的行为是未定义的。
使用:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "poiu";
char arr2[] = "lkj";
strcpy(arr1, arr2);
printf("%sn", arr1);
}
注意事项:
1.源字符串必须以 ‘ ’ 结束。
2.会将源字符串中的 ‘ ’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变。
5.模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++);
// 拷贝字符串,包括'