c字符串函数实现(1)---strncpy

 

strncpy原型:
	char* strncpy(char* dest,const char* src,size_t count);
函数说明:
	1、当count <= strlen(src)+1(包括'\0')
	   逐个将src中count个字符赋予dest,包括'\0'
	2、当count > strlen(src)+1时
		将src字符(包括'\0')全部赋予dest,不够的补'\0'赋予dest
	3、当count的大小超过dest的存储空间,则程序崩溃
		
#include <iostream>
#include <cstring>
#include <cstddef>
#include <assert.h>
char* my_strncpy(char* dest,const char* src,size_t count);
int main()
{
	const char* src = "sch";
	char dest[] = "sdvnlskndvlsfghnd";
	int num = strlen(dest)+1;
	strncpy(dest,src,0);
for(int i=0;i<num;i++) { if(dest[i]) printf("%c",dest[i]); else printf("\\0"); } printf("\n"); return 0; } char* my_strncpy(char* dest,const char* src,size_t count) { assert(NULL!= dest && NULL!= src); char* pdest = dest; int num_src = 0 ; while(src[num_src++]!='\0'); //num_src = strlen(src) + 1; if(count <= num_src) { while(count--) *dest++ = *src++; } else { int temp = count - num_src; while(num_src--) *dest++ = *src++; while(temp--) *dest++ = '\0'; } return pdest; }

总之一句话,就是将src指向的字符赋予dest,不够的在后面补'\0'。

不过strncpy在使用的时候有几点很容易出错的地方:

1、如果dest的内存空间不够存放count个字节内容,出现崩溃。

2、当count个字符恰好将dest内存占满时,也就是说,dest后面不会有‘\0’,此时用printf或者cout输出字符串时,会出现乱码现象。

    所以一般来说,最好采用如下方式:

   char fullname[MAX];

   strncpy(fullname,s,MAX-1);

 fullname[MAX-1] = '\0';

   

 

posted @ 2013-04-27 11:50  挡不住会飞的鸡  阅读(228)  评论(0编辑  收藏  举报