// 内存拷贝
void* mem_cpy(void* dest,const void* src,size_t n)
{
assert(NULL!=dest && NULL!=src && dest!=src && 0!=n);
// 防止src与dest内存块之间有交集
if(dest > src)
{
// 从后向前拷贝
for(int i=n-1; i>=0; i--)
{
// 以字节为单位拷贝,void指针的进步值是1,void指针不能解引用所以要先转换成char*再解引用
*(char*)(dest+i) = *(char*)(src+i);
}
}
else
{
// 从前向后拷贝
for(int i=0; i<n; i++)
{
*(char*)(dest+i) = *(char*)(src+i);
}
}
return dest;
}
// 计算字符串长度
size_t str_len(const char* str)
{
assert(NULL != str);
// 让tmp指向字符串的开头
const char* tmp = str;
// *tmp结果是'\0',while循环结束
while(*tmp++);
// 由于tmp使用的是后++,此时tmp指向的是'\0'后面的位置
return tmp-str-1;
}
// 把字符串src拷贝到dest位置,包括'\0'
char* str_cpy(char* dest,const char* src)
{
assert(NULL!=dest && NULL!=src);
// 备份dest
char* tmp = dest;
// 把字符串src中的每个字符者拷贝给dest,把'\0'拷贝过去后while才会结束
while(*tmp++ = *src++);
// 返回dest方便后续链式调用
return dest;
}
// 把字符串src连接dest的末尾
char* str_cat(char* dest,const char* src)
{
assert(NULL!=dest && NULL!=src);
// 备份dest
char* tmp = dest;
// 循环结束时,tmp要指向dest的'\0'位置
while(*tmp) tmp++;
// 把字符串src中的每个字符拷贝到dest的末尾,把'\0'拷贝过去后while才会结束
while(*tmp++ = *src++);
return dest;
}
// 字符串比较
int str_cmp(const char* s1,const char* s2)
{
assert(NULL!=s1 && NULL!=s2);
// 找到s1和s2第一个不相等的字符
while(*s1 && *s1 == *s2)
s1++ , s2++;
if(*s1 > *s2)
return 1;
if(*s1 < *s2)
return -1;
// 字符串s1、s2一模一样
return 0;
}
主要的操作字符串的函数
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 学习测试开发的Day84,真棒!学习时间为1H25M第八次全天课(下午视频2H11M-3H15M) rfind r...
- 将做工程过程比较好的内容做个记录,下边代码段是关于提供几个常用的C#字符串操作函数的代码。 public stat...
- 字符串格式化组装通用函数 C++对字符串组装没有一个很直接好用的函数,这里利用C的snprintf()函数,提供一...