编写字符串复制函数
来源:互联网 发布:神奇表盘 网络错误 编辑:程序博客网 时间:2024/06/05 05:03
编写字符串复制函数
字符串复制函数看似简单,但隐藏了一些容易被忽略的细节,这些细节恰恰也是平时工作中的隐藏的BUG所在,一旦发生很难察觉,而且这也是各大企业在招聘的时候重要的考点。下面说明一下。
问题:设计一个字符串复制函数如下
char *str_copy(char *dest, const char *src)
要求:把src所指向的字符串中的内容复制到dest所指向的字符数组(或字符指针)中。(注意:src和dest所指向的内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串(笔者当初将dest设为字符指针时候差点忘了这个问题),返回指向dest的指针)
解答:
#include<stdio.h>#include<stdlib.h>#include<assert.h>char *str_copy(char *dest, const char *src){ assert((dest!=NULL)&&(src!=NULL));//(1)这句一定得有,断言。关于这个介绍,在后面说明。 char *pd=dest; while((*dest++=*src++)!='\0'); //(2) return pd;}int main(){ char dest[20]; //char *dest=(char*)malloc(sizeof(char)*20); //或者用char dest[20]; //char dest[]="good morning";这一句也可以,但必须这个字符串长度要大于等于src[]中的字符串 长度, //不然发生数组越界。但是如果用char *dest="good morning";之后再执行str_copy就错了,因为这么声明 //的dest是个字符串常量,这个地址dest是个指向const的指针,指针指向的内容不可以变,所以如果给它从新 //赋值,会造成程序崩溃。搞清楚char dest[]="good morinig";和char *dest="good morning";的区别和联系 char *p=dest; char src[]="Hello eric!"; //或者是char *src="Hello eric!"; //char *src=NULL; //测试用例,如果src或者dest有一个是NULL,assert断言发生作用。 str_copy(dest, src); //或者是str_copy(dest, "Hello eric!"); //while(*p!='\0') //{ //printf("%c",*p++); //} printf(dest); //或者printf("%s\n",dest); system("pause"); return 0;}
说明:(1)程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。
assert(表达式)的意思是:当表达式为真时,程序继续运行,如果表达市为假,那程序就会停止运行,并提示错误信息。
注意:assert是一个宏,只在debug版本中起作用,在release版本中,该语句是不起任何作用的。如果将src或者dest设为NULL(程序中的注释中有说明),则assert(断言)发生作用,截图如下。
(2)这句话实际上已经包含了将src中的'\0'拷贝到dest中。如果不是直接在括号里一步实现,不要忘了在拷贝完成之后,单独给dest加'\0'
while(*src!='\0')
{
*dest++=*src++;
}
*dest='\0';
- 编写字符串复制函数
- 自己编写字符串复制函数
- 编写字符串复制函数strcpy及memcpy函数
- 编写标准的字符串复制(strcpy)函数
- 编写标准的字符串复制(strcpy)函数
- 编写标准的字符串复制(strcpy)函数
- 编写标准的字符串复制(strcpy)函数
- 字符串复制函数
- C++ 字符串复制函数
- 字符串复制函数
- 字符串复制函数
- 字符串复制函数
- 字符串之复制函数
- 复制函数字符串
- 复制字符串strcpy()函数
- 字符串复制函数小结
- C++字符串复制函数
- 字符串复制函数测试
- freeradius授权authorization——users文件
- PhoneGap 1.0 发布,移动开发者的瑞士军刀
- 成为优秀技术人员的两点建议
- Select/checkbox
- 浅谈文件捆绑技术及实现方式
- 编写字符串复制函数
- 读点CMMI (2)
- Android SDK API 13升级指南
- 解析Java中抽象类和接口的区别
- 如何防止头文件被重复包含、嵌套包含
- 测试 代码
- Struts2的工作机制及分析(转)
- 解决PostMessage发送字符串造成数据错乱问题
- USACO 1.1 Greedy Gift Givers