| |
 |
|
 |
 |
|
 |
C标准库字符串函数:strncpy
|
|
|
不使用库函数实现strncpy。
|
#if VERSION1 char *strncpy(char *dst, const char *src, size_t count) { assert((dst != NULL) && (src != NULL)); char *tmp = dst;
while (count-- && (*dst++ = *src++) != '\0') { /* nothing */; }
return tmp; } #endif
#if STD_VERSION char *strncpy(char *dst, const char *src, size_t count) { assert((dst != NULL) && (src != NULL)); char *tmp = dst;
while (count && (*dst++ = *src++) != '\0') { count--; }
while (count--) { *dst++ = '\0'; }
return tmp; } #endif
|
这里实现了两个版本,实际上都有使用上的不便处。
版本1中,如果源串长度大于等于目的串,则复制完指定count字节后停止,不会自动添加'\0'。这时需要程序员保证count不能大于dst的长度,否则就会发生内存越界。如果源串小于目的串,则在复制完成源串后,自动结束。
版本2中,如果源串长度大于等于目的串,则复制完指定count字节后停止,不会自动添加'\0'。这时需要程序员保证count不能大于dst的长度,否则就会发生内存越界。如果源串小于目的串,则在复制完成源串后,还会继续复制'\0'到dst,直到达到count的字节数。
ANSI C标准库的规定中还是版本2。在使用时需要注意这些细节问题。
测试驱动如下:
 |
| 文件: |
strncpy.tar.gz |
| 大小: |
2KB |
| 下载: |
下载 | |
|
|
|
发表于: 2007-11-02,修改于: 2007-11-19 16:09,已浏览1090次,有评论0条
推荐
投诉
|
|
 |
|
 |
|  |
|
 |
|