您的位置:首页 > 其它

模拟实现 strncpy( )函数

2017-11-24 13:06 309 查看
在模拟 strncpy( ) 函数之前我们先看一下它的源码声明

char *strncpy( char *strDest, const char *strSource, size_t count );


返回值是一个char * 指针,包含三个参数,一个 char * 的目标字符串,一个 const char * 的不允许改变的其内容的常量指针,和一个要拷贝字符个数的无符号整形,意思是将strSource源字符串中的前count个字符替换掉strDest目标字符串中的前count个字符。

这里有一点要注意,如果源字符串的长度小于count,则拷贝完源字符串之后,在目标字符串的后面追加0,直到conut个。

模拟strncpy( )函数如下

char * My_strncpy(char * dest, const char *src, size_t n)
{
assert(dest);
assert(src);

char *ret = dest;
while (n--)
{
*dest++ = *src++;
}
return ret;
}


测试:

char str1[20] = "123456789";
char str2[20] = "abcde";
printf("%s", My_strncpy(str1, str2, 3));// 测试1: 个数3小于字符串"abcde"的长度




char str1[20] = "123456789";
char str2[20] = "abcde";
printf("%s\n", My_strncpy(str1, str2, 6));// 测试2: 个数6等于字符串"abcde"的长度




char str1[20] = "123456789";
char str2[20] = "abcde";
printf("%s\n", My_strncpy(str1, str2, 8));// 测试3: 个数8大于字符串"abcde"的长度




代码实现(环境:Visual Studio 2017)

//1.模拟实现strncpy

#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <assert.h>

#pragma warning( disable : 4996)

char * My_strncpy(char * dest, const char *src, size_t n) { assert(dest); assert(src); char *ret = dest; while (n--) { *dest++ = *src++; } return ret; }

int main()
{
char str1
a7b6
_0[20] = "123456789";
char str1_1[20] = "123456789";
char str2[20] = "abcde";

printf("调用strncpy之前: str1_0: %s \n", str1_0);
strncpy(str1_0, str2, 5); //调用系统strncpy
printf("调用strncpy之后: str1_0: %s \n", str1_0);

printf("调用My_strncpy之前: str1_1: %s \n", str1_1);
My_strncpy(str1_1, str2, 5); //调用My_strncpy
printf("调用My_strncpy之后: str1_1: %s \n", str1_1);

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: