关于越界的问题
这是第一个:
#include <stdio.h>#include <malloc.h>#include <string.h>char *mystrcpy(char *strDest, char *strSrc){ int i = 0; char *address = NULL; if ((NULL == strDest) || (NULL == strSrc))/* 首先判断目的字符串,只要目的字符串为空,那么就直接返回空地址 */ { return NULL; } address = strDest;/* 保留目的字符串的首地址 */ while ((*strDest++ = *strSrc++) != '\0');/* 把\0也复制到目的字符串里面了 */ return address;/* 返回目的字符串的首地址 */}int main(void){ char *str1 = "abcde"; char *str2 = (char *)malloc(strlen(str1));//这个地方分配5个字节的空间,没有为'\0'分配空间,程序运行正常。 mystrcpy(str2, str1); printf("%s\n%s\n%d\n", str1, str2,strlen(str1)); return 0;} #include <stdio.h>#include <malloc.h>#include <string.h>char *mystrcpy(char *strDest, char *strSrc){ int i = 0; char *address = NULL; if ((NULL == strDest) || (NULL == strSrc))/* 首先判断目的字符串,只要目的字符串为空,那么就直接返回空地址 */ { return NULL; } address = strDest;/* 保留目的字符串的首地址 */ while ((*strDest++ = *strSrc++) != '\0');/* 把\0也复制到目的字符串里面了 */ return address;/* 返回目的字符串的首地址 */}int main(void){ char *str1 = "abcde"; char str2[5];//这个地方也分配5个字节的空间,没有为'\0'分配空间,程序运行有bug。 mystrcpy(str2, str1); printf("%s\n%s%d\n", str1, str2,strlen(str1)); return 0;}