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';
浙公网安备 33010602011771号