strcpy,strncpy;strcat,strncat;memcpy,memncpy;
来源:互联网 发布:结构方程模型软件 编辑:程序博客网 时间:2024/05/18 02:33
strcat(str1,str2):1)str1必须足够大;2)str1原来的'\0'被取消,只保留str2的'\0',也就是str2从str1的'\0'位置开始占用;
哎,懒得写了,直接上源码了,我想说的再多,不如真真切切的看到其实现方式实在... ...呵呵.. ...
//linux2.6.10中源码
char * strcpy(char * dest,const char *src)
{
char *tmp = dest;
while ((*dest++ = *src++) != '\0')
/* nothing */;
return tmp;
}
可以看出,是将src中的'\0'一起拷贝了的.
char * strncpy(char * dest,const char *src,size_t count)
{
char *tmp = dest;
while (count) {
if ((*tmp = *src) != 0) src++;
tmp++;
count--;
}
return dest;
}
size_t strlcpy(char *dest, const char *src, size_t size)
{
size_t ret = strlen(src);
if (size) {
size_t len = (ret >= size) ? size-1 : ret;
memcpy(dest, src, len);
dest[len] = '\0';
}
return ret;
}
char * strcat(char * dest, const char * src)
{
char *tmp = dest;
while (*dest)
dest++;
while ((*dest++ = *src++) != '\0')
;
return tmp;
}
char * strncat(char *dest, const char *src, size_t count)
{
char *tmp = dest;
if (count) {
while (*dest)
dest++;
while ((*dest++ = *src++) != 0) {
if (--count == 0) {
*dest = '\0';
break;
}
}
}
return tmp;
}
size_t strlcat(char *dest, const char *src, size_t count)
{
size_t dsize = strlen(dest);
size_t len = strlen(src);
size_t res = dsize + len;
/* This would be a bug */
BUG_ON(dsize >= count);
dest += dsize;
count -= dsize;
if (len >= count)
len = count-1;
memcpy(dest, src, len);
dest[len] = 0;
return res;
}
int strcmp(const char * cs,const char * ct)
{
register signed char __res;
while (1) {
if ((__res = *cs - *ct++) != 0 || !*cs++)
break;
}
return __res;
}
int strncmp(const char * cs,const char * ct,size_t count)
{
register signed char __res = 0;
while (count) {
if ((__res = *cs - *ct++) != 0 || !*cs++)
break;
count--;
}
return __res;
}
void * memcpy(void * dest,const void *src,size_t count)
{
char *tmp = (char *) dest, *s = (char *) src;
while (count--)
*tmp++ = *s++;
return dest;
}
void * memmove(void * dest,const void *src,size_t count)
{
char *tmp, *s;
if (dest <= src) {
tmp = (char *) dest;
s = (char *) src;
while (count--)
*tmp++ = *s++;
}
else {
tmp = (char *) dest + count;
s = (char *) src + count;
while (count--)
*--tmp = *--s;
}
return dest;
}
- strcpy,strncpy;strcat,strncat;memcpy,memncpy;
- 模拟实现strcpy,strncpy,strcat,strncat,strcmp,strncmp,memcpy,memmove
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- 字符串函数(strcpy strncpy strcat strncat strcmp strncmp memcpy memmove)
- 字符串函数——strcpy 、strncpy 、strcat、 strncat、 strcmp 、strncmp、 memcpy、 memmove)
- strncpy strcpy strncat strcat sizeof strlen 概述
- strcpy/strcat && strncpy/strncat && strlcpy/strlcat 总结
- strcat,strncat,strcpy,strncpy,snprintf,vsnprintf
- 笔记整理:strcpy,strcat,strcmp,strncpy,strncat
- strcpy、strncpy与memcpy strlen strcat strcmp
- strcpy(),strncpy(),strcmp(),strcat(),memset(),memcpy(),atoi(),
- 字符串常用操作(strlen,strcpy,strcat,strcmp,strncpy,strncat)
- C中的strcpy()、strcat()、strcmp()、strncpy()、strncat()、strncmp()
- 字符串库函数strlen,strcmp,strcpy,strncpy,strcat,strncat自定义实现
- strcpy、strcat函数源码,strncpy,strncat,strncmp,strtok
- strcpy, strncpy, strcat, strncat, sprintf, snprintf等常用函数
- 模拟实现stlen,strcmp,strcat, strcpy, strncat, strncpy
- strncpy strncat memcpy对比
- 渐析java的浅拷贝和深拷贝
- 关于JavaScript Dom
- Java中重写Object类的equals方法和hashcode方法的注意事项
- 原来这里是技术博客...
- 把孩子培养成为合格Geek的七个方法
- strcpy,strncpy;strcat,strncat;memcpy,memncpy;
- hdoj 3791 二叉搜索树
- struts2属性驱动(Property Driver)和模型驱动(Model Driver)区别
- 使用过程模板简化团队项目
- js中的break ,continue, return
- linux下安装配置使用memcache,memcached,libevent(后有ubuntu的memcache安装)
- Erlang 聊天室程序(五) 设置客户端信息
- 面试问题汇总 精选 分析 解答 职业规划 part 4
- 用swig进行python扩展c语言(范例+错误解决)