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