实现strcpy函数功能
2014-05-27 11:25
239 查看
第一次写这个程序的时候写的很烂,感觉从网上找的这个很好。
但是第二次自己又写的时候,突然发现了几个问题:
1.源字符串指针最好用const限定一下,这个是肯定正确的,而且查看了<string.h>中strcpy函数的原型:char *_cdecl strcpy ( char *_Dest, const char *_Source );
2.检查传入参数合法性用throw有好处,这个我同意;
3.感觉保存原始的目的指针不是特别必要,因为指针本身实际上还是通过值传递的方式传入的,所以调用函数那边的目的指针没有改变。不过函数中保存原始目的指针而且返回这个目的指针,我猜可能是为了这个函数能够嵌套调用,这样更灵活;
4.对于源字符串长度大于目的字符串的情况,这个函数和<string.h>中strcpy函数都会照样复制,不管目的字符串的容量,即:
char A[] = "abcd";
char B[] = "wrj";
strcpynry(B,A);
或
strcpy(B,A);
结束之后B都是"abcd"。
自己做了一个实验:
char A[] = "abcd";
char B[4] = "wrj";
B[3] = 'a';
B[4] = 'e';
B[5] = '\0';
编译通过,运行也没问题。不知道是不是因为这样,所以strcpy函数才放心大胆的统统复制了。
不过我就觉得复制过去的毕竟是未知的内存,能保证安全么?
5.while((*strDest++ = *strSource++) != '\0');语句非常简洁,赞。
自己第二次写的类strcpy函数:
比较一下,以知不足。
char *strcpynry(char *strDest, char *strSource) { char* strDestCopy = strDest;//这里要先保存一下目的指针,因为下面会改变 if (strDest == NULL || strSource == NULL)//验证传进来的指针的合法性 throw "invalid argument(s)";//抛出异常 //使用异常的方法比传回不同的返回值效果好, //因为能确认出错,而不是依赖于函数使用者检查返回值的自觉性 //挨个复制,且要保证最后的结束符也正常复制 while((*strDest++ = *strSource++) != '\0'); return strDestCopy;//注意要传回原始的目的指针 }
但是第二次自己又写的时候,突然发现了几个问题:
1.源字符串指针最好用const限定一下,这个是肯定正确的,而且查看了<string.h>中strcpy函数的原型:char *_cdecl strcpy ( char *_Dest, const char *_Source );
2.检查传入参数合法性用throw有好处,这个我同意;
3.感觉保存原始的目的指针不是特别必要,因为指针本身实际上还是通过值传递的方式传入的,所以调用函数那边的目的指针没有改变。不过函数中保存原始目的指针而且返回这个目的指针,我猜可能是为了这个函数能够嵌套调用,这样更灵活;
4.对于源字符串长度大于目的字符串的情况,这个函数和<string.h>中strcpy函数都会照样复制,不管目的字符串的容量,即:
char A[] = "abcd";
char B[] = "wrj";
strcpynry(B,A);
或
strcpy(B,A);
结束之后B都是"abcd"。
自己做了一个实验:
char A[] = "abcd";
char B[4] = "wrj";
B[3] = 'a';
B[4] = 'e';
B[5] = '\0';
编译通过,运行也没问题。不知道是不是因为这样,所以strcpy函数才放心大胆的统统复制了。
不过我就觉得复制过去的毕竟是未知的内存,能保证安全么?
5.while((*strDest++ = *strSource++) != '\0');语句非常简洁,赞。
自己第二次写的类strcpy函数:
void strcpynry (char * Dest, const char * Scr) { if (Dest == NULL || Scr == NULL) return; while (*Dest !='\0' && *Scr != '\0') { *Dest = *Scr; Dest++; Scr++; } }
比较一下,以知不足。
相关文章推荐
- 编程实现strcpy函数功能
- 编写程序实现strlen()函数,strcmp(),strcpy(),strcat()的功能
- 实现一个同strcpy功能相同的函数mystrcpy
- 编写程序实现strlen()函数,strcmp(),strcpy(),strcat()的功能
- C语言 不使用strcpy 函数实现字符串复制功能
- 编程菜鸟的日记-初学尝试编程-编写函数实现strcpy功能(总结考察点)
- 编写函数实现strcat(),strcmp()以及strcpy()的功能
- 编写函数实现strcat(),strcmp()以及strcpy()的功能
- 功能函数strcpy的实现(考虑内存覆盖)
- 编写程序,实现strcpy()相同功能myStrcpy()函数
- 编C语言程序:用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和strlwr的功能
- 自己模拟strcpy库函数写的功能函数my_strcpy实现strcpy的功能,完整代码
- 初次用函数实现strcpy的功能
- 实现strlen,strcpy,strcat,strcmp同功能的函数stringLength,stringCopy,stringCatch,stringCompare
- 用函数my_strcpy(char *dest,char *sour)实现strcpy()的功能
- 请写一个函数,实现类似的strcpy的字符串复制功能
- 自己模拟实现strcpy函数功能
- strcpy 和 memcpy两个函数的实现
- 利用MySQL自带的C API函数实现数据库功能调用
- SQL实现类似C#的Split()函数的功能