C字符串函数strcmp\strcpy\strcat\memcpy
来源:互联网 发布:变形金刚倾天柱 乐乎 编辑:程序博客网 时间:2024/05/17 21:55
1.strcmp
int strcmp(const char* str1, const char*str2){ assert(str1 != NULL&&str2 != NULL); while (*str1&&*str1 == *str2){ str1++; str2++; } if (*(unsigned char*)str1 < *(unsigned char*)str2){ return -1; } else if (*(unsigned char*)str1 > *(unsigned char*)str2){ return 1; } else{ return 0; }}
注意:
1.参数是 const
2.异常输入处理 assert(str1 != NULL&&str2 != NULL);
3.字符之间大小比较时一定要先将char*型指针先转换为unsigned char*
因为有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值。
例如 *str1的值为1,*str2的值为255。
本来*str1<*str2,但是有符号数中255是-1.
2.strcat
char *strcat(char* strDest, const char*strSrc){ assert(strDest != NULL&&strSrc != NULL); char* address = strDest; while (*strDest != '\0') strDest++; while (*strSrc != '\0'){ *strDest = *strSrc; strDest++; strSrc++; } *strDest = '\0';// return address;}
1.注意参数和返回值
2.要覆盖原字符串’\0’,结尾添加’\0’
3.strcpy
char *strcpy(char* strDest, const char*strSrc){ assert(strDest != NULL&&strSrc != NULL); char* address = strDest; while (*strSrc != '\0'){ *strDest = *strSrc; strDest++; strSrc++; } *strDest = '\0'; return address;}
如果有必要也应该考虑地址重叠问题
4.memcpy
先看下标准memcpy()的解释:
void * memcpy ( void * destination, const void * source, size_t num );
自己动手实现memcpy()时就需要考虑地址重叠的情况。
#include<iostream>#include<cstdio>using namespace std;void* mymemcpy(void* dst, const void* src, size_t n){ if (dst == NULL || src == NULL) return NULL; char* pdst; char* psrc; if (src >= dst || (char*)dst >= (char*)src + n - 1){ pdst = (char*)dst; psrc = (char*)src; while (n--){ *pdst++ = *psrc++; } } else{ pdst = (char*)dst+ n - 1; psrc = (char*)src+ n - 1; while (n--){ *pdst-- = *psrc--; } } return dst;}int main(){ char buf[100] = "abcdefghijk"; memcpy(buf+2, buf, 5); //mymemcpy(buf + 2, buf, 5); printf("%s\n", buf + 2); return 0;}
结果
abcdehijk
0 0
- C字符串函数strcmp\strcpy\strcat\memcpy
- C语言中字符串相关函数的实现(strcat strlen strcmp strcpy memcpy)
- C基础:strcat,strcmp,memcpy,strcpy等函数的实现
- strcat,strcpy,strcmp,strlen,memcpy函数原型
- strcat,strcmp,memcpy,strcpy函数实现
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- C语言字符串函数详解 strcpy、strcmp、strcat、strlen、strstr
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- strcpy, strcat, strcmp, strlen,memcpy
- 字符串函数的原型实现(strcpy, strcat, strcmp, memset, memcpy, memmove)
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 字符串函数(strcpy strncpy strcat strncat strcmp strncmp memcpy memmove)
- 字符串函数——strcpy 、strncpy 、strcat、 strncat、 strcmp 、strncmp、 memcpy、 memmove)
- 字符串函数模拟实现(strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove)
- 自定义字符串函数:strlen,strcat,strcpy,strcmp
- 自定义字符串函数:strlen,strcat,strcpy,strcmp
- 导航控制器(NavigationController)的生命周期
- Win7 无法访问局域网共享文件服务器 提示密码错误的解决办法
- Eclipse中Java项目打包——外部jar包位置 ,生成jar包位置,mf文件书写等问题
- linux 下opencv的安装
- QR二维码扫描
- C字符串函数strcmp\strcpy\strcat\memcpy
- Android中JNI的使用方法
- SQL 查询优化
- Chrome调试工具奇淫技
- hadoop SequenceFile
- xib自定义控件 在 6p上被放大的文头解决方案
- DB2 注册 错误提示 LIC1450I The product licensed was not found in the DB2 copy
- 2.1
- pycharm中的快捷键