c语言实现函数,增加STRCPY、STRNCPY、STRCAT、STRNCAT四个安全的函数,弥补库函数的缺陷,解决dest的初始化和内存越界的问题
char *STRCPY(char* dest,const size_t destsize,const char* src);
char *STRNCPY(char* dest,const size_t destsize,const char* src,size_t n);
char *STRCAT(char* dest,const size_t destsize,const char* src);
char *STRNCAT(char* dest,const size_t destsize,const char* src,size_t n);
注意,上述函数的第二个参数destsize是第一个参数dest占用内存的字节数。
#include "_public.h"
int main(){
char str[50];
memset(str,0x00,sizeof(str));
char str1[50];
memset(str1,0x00,sizeof(str1));
STRCPY(str,sizeof(str),"asdfghjkl");
printf("对str空串控制内存不越界赋值“asdfghjkl”结果为:%s\n",str);
printf("对%s控制内存不越界赋值“asdf”结果为:%s\n",str , STRCPY(str,sizeof(str),"asdf"));
memset(str,0x00,sizeof(str));
STRNCPY(str,sizeof(str),"sadfghjkgfdsafghf",6);
printf("对str空串控制内存不越界赋值“sadfghjkgfdsafghf”前6个字符,结果为:%s\n",str);
STRCPY(str1,(sizeof(str1))/sizeof(char),str);
STRCAT(str,sizeof(str),"1234567890");
printf("对%s后 控制str内存不越界 的接字符串“1234567890”,结果为:%s\n",str1,str);
STRCPY(str1,(sizeof(str1))/sizeof(char),str);
STRNCAT(str,sizeof(str),"1234567890",7);
printf("对%s后 控制str内存不越界 的接字符串“1234567890”前7个字符,结果为:%s\n",str1,str);
return 0;
}