strcpy/strncpy/strcat/strlen等源码

1.strcpy的源码 From Android
代码如下:

?
001
002
003
004
005
006
char * strcpy ( char *dst, const char *src)
{
char *ret = dst;
while (*dst++ = *src++) ;
return ret;
}

再来一份FreeBSD里面的,感觉大牛们的编码方式好奇怪

?
001
002
003
004
005
006
007
008
char *
strcpy ( char * __restrict to, const char * __restrict from)
{
char *save = to;
for (; (*to = *from); ++from, ++to);
return (save);
}


2.strncpy是拷贝n个字符
以下来自Android

?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
char * strncpy ( char *dst, const char *src, size_t n)
{
if (n != 0) {
char *d = dst;
const char *s = src;
do {
if ((*d++ = *s++) == 0) {
/* NUL pad the remaining n-1 bytes */
while (--n != 0)
*d++ = 0;
break ;
}
} while (--n != 0);
}
return (dst);
}

再来一份:

?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
char * strncpy ( char *to, const char *from, size_t count)
{
register char *ret = to;
while (count > 0) {
count--;
if ((*to++ = *from++) == '\0' )
break ;
}
while (count > 0) {
count--;
*to++ = '\0' ;
}
return ret;
}

3.strcat是连接两个字符串
以下来自FreeBSD

?
001
002
003
004
005
006
007
008
char * strcat ( char * __restrict s, const char * __restrict append)
{
char *save = s;
for (; *s; ++s);
while ((*s++ = *append++));
return (save);
}

再来一份来自神奇软件Emacs的源码

?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
char * strcat ( char *dest, const char *src)
{
REGISTER char *s1 = dest;
REGISTER const char *s2 = src;
char c;
/* Find the end of the string. */
do
c = *s1++;
while (c != '\0' );
/* Make S1 point before the next character, so we can increment
it while memory is read (wins on pipelined cpus). */
s1 -= 2;
do
{
c = *s2++;
*++s1 = c;
}
while (c != '\0' );
return dest;
}

4.strncat是连接两个字符串,只连接源串的n个字符

?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
char * strncat ( char *dst, const char *src, size_t n)
{
if (n != 0) {
char *d = dst;
const char *s = src;
while (*d != 0)
d++;
do {
if ((*d = *s++) == 0)
break ;
d++;
} while (--n != 0);
*d = 0;
}
return (dst);
}

5.strlen是计算字符串的长度

?
001
002
003
004
005
006
int strlen ( const char *s)
{
int len = 0;
while (*s++) len++;
return len;
}

更多的相关函数自己下载GLIBC下来慢慢看吧,不过C标准的字符串函数都不是安全的函数,需要调用的程序员保证.


转载自:


http://www.stackpop.org/html/206_strcpy_strncpy_strcat_strncat.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值