【C语言】模拟实现strcpy()、strncpy()函数

时间:2022-09-05 23:04:55

//strcpy
函数原型:char *strcpy( char *dest, const char *src );

用法:#include <string.h>

功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

  

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

        返回指向dest的指针。

  

# define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<assert.h>

char *my_strcpy(char *dest, const char *src)
{
assert(dest);
assert(src);
char *temp = dest;
while (*temp++ = *src++)
{
;
}
return dest;
}

int main()
{
char a[20];
my_strcpy(a, "hello world");
printf("%s\n", a);
system("pause");
return 0;
}


//strncpy

原型:char * strncpy(char *dest, char *src, size_tn); 

功能:将字符串src中最多n个字符复制到字符数组dest(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。

要求:如果n > dest串长度,dest栈空间溢出产生崩溃异常。该函数注意的地方和strcpy类似,但是n值需特别注意

#pragma warning (disable:4996)
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<assert.h>

char *my_strncpy(char *dest, const char *src, int num)
{
assert(dest);
assert(src);

int i = 0;
char *temp = dest;
for (i = 0; i < num; i++)
{
*temp++ = *src++;
}
return dest;
}

int main()
{
char str1[] = {"abcdefghij"};
char str2[] = {"1234567"};
my_strncpy(str1, str2, 4);
printf("%s\n",str1);
printf("%s\n", my_strncpy(str1, str2, 7));
system("pause");
return 0;
}