当前位置: 技术问答>linux和unix
看linux代码的时候遇到问题,请教大家
来源: 互联网 发布时间:2015-02-11
本文导语: 代码在lib/string.c中 #ifndef __HAVE_ARCH_STRNCPY /** * strncpy - Copy a length-limited, %NUL-terminated string * @dest: Where to copy the string to * @src: Where to copy the string from * @count: The maximum number of bytes to copy * * N...
代码在lib/string.c中
#ifndef __HAVE_ARCH_STRNCPY
/**
* strncpy - Copy a length-limited, %NUL-terminated string
* @dest: Where to copy the string to
* @src: Where to copy the string from
* @count: The maximum number of bytes to copy
*
* Note that unlike userspace strncpy, this does not %NUL-pad the buffer.
* However, the result is not %NUL-terminated if the source exceeds
* @count bytes.
*/
char * strncpy(char * dest,const char *src,size_t count)
/* [][^][v][top][bottom][index][help] */
{
char *tmp = dest;
while (count-- && (*dest++ = *src++) != '')
/* nothing */;
return tmp;
}
#endif
如果在没有达到count之前拷贝完字符串,为什么不在目标字符串后面加上''呢?
代码版本是2.4.18
#ifndef __HAVE_ARCH_STRNCPY
/**
* strncpy - Copy a length-limited, %NUL-terminated string
* @dest: Where to copy the string to
* @src: Where to copy the string from
* @count: The maximum number of bytes to copy
*
* Note that unlike userspace strncpy, this does not %NUL-pad the buffer.
* However, the result is not %NUL-terminated if the source exceeds
* @count bytes.
*/
char * strncpy(char * dest,const char *src,size_t count)
/* [][^][v][top][bottom][index][help] */
{
char *tmp = dest;
while (count-- && (*dest++ = *src++) != '')
/* nothing */;
return tmp;
}
#endif
如果在没有达到count之前拷贝完字符串,为什么不在目标字符串后面加上''呢?
代码版本是2.4.18
|
没有达到@count时,目标串已经有''了,仔细看一下:
(*dest++ = *src++) != 0
最后一个''也赋给了*dest
(*dest++ = *src++) != 0
最后一个''也赋给了*dest
|
while (count-- && (*dest++ = *src++) != '' )
首先执行(*dest++ = *src++) 这个,()里的优先级高嘛。完成copy工作
然后应该是这个,我感觉是(*dest++ = *src++) != '' ,因为not 优先级比and 高。
然后察看count是否为0
最有把dest, src, count分别自加减。值得注意的就是char *tmp,为了保存原始指针,不能没有。
首先执行(*dest++ = *src++) 这个,()里的优先级高嘛。完成copy工作
然后应该是这个,我感觉是(*dest++ = *src++) != '' ,因为not 优先级比and 高。
然后察看count是否为0
最有把dest, src, count分别自加减。值得注意的就是char *tmp,为了保存原始指针,不能没有。
|
本来就是从左到右呀!你是说当(count-- == 0)时后面的就不会执行了是吗?注释中不说了吗:the result is not %NUL-terminated if the source exceeds @count bytes.