#include <stdio.h>
#include <string.h>
//防止溢出的strcpy
char* strcpy_enhance(char *dest, const char *src, size_t destSize)
{
printf("%lld %lld\n", sizeof(dest), destSize);//观察两个值的取值区别
memset(dest, '\0', destSize);//事实证明入参的格式化宽度只能从外部获取,指针本身和存储指针的指针根本不是一个定义
size_t len = 0;
if (strlen(src) <= destSize-1 ) len = strlen(src);
else len = destSize - 1;
strncpy(dest, src, len);
dest[len] = '\0';
return dest;
}
int main(){
char chs_dest[30];
char *pchs_dest = chs_dest;
strcpy_enhance(pchs_dest, "0d1d2d3d4d5d6d7d8d9d0f1f2f3f4f5f6f7f8f9f", sizeof(chs_dest));//sizeof中不能用指针pchs_dest,指针本身和存储指针的指针根本不是一个定义
printf("%s\n", pchs_dest);
return 0;
}
一般在64位系统中,指向某一地址的指针始终是8byte,也就是1byte,而实际数据的地址对应的数据宽度由实际情况而定