strlen() 和 strcpy()函数
strlen() 和 strcpy()函数的区别,这两个一个是返回一个C风格字符串的长度,一个是对一个C风格字符串的拷贝,两个本来功能上是不同的,此外,他们还有一些细小的区别:strlen("hello")返回的结果是5,是不包含字符串结尾处的‘\0’,但是strcpy(str1,str2),会拷贝str2中的‘\0’。
在使用strlen()的返回值去为strcpy的第一个参数分配空间的时候一定要注意!
举个例子:
char *str = "hello";
int length = strlen(str);
char char_array[5];
strcpy(char_array,str);
printf("the new string is:%s\n",char_array);
cout<<"str's length is: "<<length<<endl;
这样输出的length是5,但是编译器会提示错误,VS2010提示是:

说明字符串数组定义小了,换成大小为6的数组则恢复正常。
在此,建议在使用strcpy的时候,目标数组(第一个参数)的大小应该设置为strlen()函数返回值+1 的值,或者建议使用如下的初始化数组方式:
char char_array[sizeof("hello")];
char * char_array_two = new char[strlen(str) + 1];
参考资料:
http://baike.baidu.com/link?url=QfLOtNdldgq29v53l6wKhyeB7AFxrejppntX3mhL5DHw03heqHLyRGT4Vo1b38YxgQdY8aruLeoT5h6XqLzhka
http://blog.csdn.net/yasi_xi/article/details/9088291
strlen() 和 strcpy()函数的更多相关文章
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...
- strcpy函数的实现
strcpy函数的实现 大家一般认为名不见经传strcpy函数实现不是很难,流行的strcpy函数写法是: char *my_strcpy(char *dst,const char *src) { a ...
- strcpy函数实现
1,strcpy最简便实现 char * strcpy_to (char *dst, const char *src) { char *address = dst; assert((dst != NU ...
- strcpy函数和strncpy函数的区别
strcpy函数和strncpy函数的原型介绍在我的另一篇文章中介绍了,见strcpy,strncpy,strlen等函数原型 strcpy:字串复制 原型:char *strcpy(char *de ...
- strcpy函数
不调用C/C++库函数,编写strcpy()函数. char * my_strcpy(char *strDest,const char *strSrc) { char *p=strDest; whil ...
- 写出完整版的strcpy函数及其他如:strcat,strcmp,strstr的函数实现
(---牛客网中刷题---)写出完整版的strcpy函数 如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案: 2分 1 2 3 4 void strcpy( char *st ...
- 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)
不使用库函数.自己编写的(strlen.strcpy.strcmp.strcat.memcmp.memcpy.memmove) //求字符串长度的函数 int my_strlen(const char ...
- strcpy函数的实现【转】
转自:http://www.cnblogs.com/chenyg32/p/3739564.html 已知strcpy函数的原型是: char *strcpy(char *dst, const char ...
- strstr strcpy 函数的实现
一. strcpy 代码实现 #include <iostream> #include <assert.h> #include <iostream> //#incl ...
随机推荐
- delphi label1 文字在窗体上水平来回移动
//文字在窗体上水平来回移动 procedure TForm1.Timer1Timer(Sender: TObject);{ Timer1.Interval:=10;}begin if label1 ...
- 首发Zend Studio 10.6正式版注册破解(2014-02-06更新)
1.写在前头以下文章没有图片说明,如果你没有耐性看或想看图文并茂的图片文章请绕道,谢谢配合.转发请标明转自http://www.geekso.com/ZendStudio100/以下方法仅供技术交流学 ...
- 详解C/C++函数指针声明 ( *( void(*)())0)();
( *( void(*)())0)(); float *pf; 这个声明的含义是*pf是一个浮点数,也就是说,pf是一个指向浮点数的指针. float *g() , (*h)(); 表示*g()与( ...
- FTP服务器简易有效的访问方法
访问FTP服务器传统的方法是使用专用的客户端程序,如CuteFTP,8UFTP等,也包括命令行的FTP客户端c:\windows\system32\ftp.exe程序. FTP服务器也有简易访问方法 ...
- Helpers\Number
Helpers\Number This helper has 2 methods for converting a number format and to get a percentage. Num ...
- jQuery Validate 插件[表单验证]
在客户端添加信息提交表单时我们经常需要做一些验证,比如验证不能为空,验证客户输入手机格式,验证客户输入email,url等的格式,我们可以通过EL表达式结合js 进行自主验证,今天总结一个JQuery ...
- AJAX XMLHttpRequest
<html> <head> <title>XMLHTTPRequest对象的说明DEMO</title> <script language=&qu ...
- Android进阶笔记09:Android开发经验部分总结
1. 在Android library中不能使用switch-case语句访问资源ID:在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案 2. 不能 ...
- Debian apt-get 无法补全
今天发现在终端里输入apt-get inst后按Tab键无法自动补全成 install,纳闷之余google了一下(我承认开始是baidu...),原来是没有安装 bash-completion. s ...
- 【VMware虚拟化解决方案】设计和配置VMware vCenter 5.5
在这之前,我们已经对VMware ESXi 5.5进行了整个环境的设计和规划,虽然安装VMware ESXi 5.5在CPU的选型.网络的设计.共享存储的方式.虚拟化资源的需求和安装ESXI的模式等一 ...