Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4826737
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: C/C++

2008-11-17 21:29:37

zj@zj:~/C_parm/string/own_str/strncpy$ cat strncpy.c
/*Copies count characters from the source string to the destination.
 * If count is less than the length of source,NO NULL CHARACTER is put
 * onto the end of the copied string.If count is greater than the length
 *of sources, dest is padded with null characters to length count.
 *
 * 把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中.如果src的
 * 前n个字节不含NULL字符,则结果不会以NULL字符结束;
 *如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
 *src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串
 *返回指向dest的指针.
*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_LEN 255
char* my_strncpy( char* dest, const char* source, int count );

int main()
{
   char dst1[MAX_LEN];
   char dst2[MAX_LEN];
   char* src = "Hello,world!";
   bzero(dst1,'\0');
   bzero(dst2,'\0');
   printf("After strncpy:%s\n",my_strncpy(dst1,src,15));
   printf("After strncpy:%s\n",my_strncpy(dst2,src,10));
   
   exit(EXIT_SUCCESS);
}

char* my_strncpy( char* dest, const char* source, int count )
{
  if((dest==NULL)||(source==NULL))
    perror("dest or source null");
  char *p = dest;
  while (count && (*dest++ = *source++)) count--;
  while(count--)
       *dest++ = '\0';
  /*由于dest已经移动,返回的时候返回首地址就可以了*/
    return(p);
 
  /*while (count && (*p++ = *source++)) count--;
   while(count--)
       *p++ = '\0';
   return(dest);*/

}

zj@zj:~/C_parm/string/own_str/strncpy$ ./strncpy
After strncpy:Hello,world!
After strncpy:Hello,worl

阅读(1558) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~