关于字符串的赋值和strcpy 的区别
来源:互联网 发布:知柏地黄丸治疗前列腺 编辑:程序博客网 时间:2024/06/11 10:03
http://hi.baidu.com/todaygoodhujun/blog/item/170a80940eee1a1ed21b7006.html
使用常量字符串初始化char指针,或者使用strcpy复制,从语法上我觉得都是可以的。但是,在这个例子中选择了后者,我觉得是有其他考虑的。
因为,ctermid_name是全局的,可能用来传送数据,将str指向这个地址,可能会和其他的函数同步一个内存变量;而使用常量初始化:str="/dev/tty",那么系统会分配地址,这样str的地址是随机的。
个人认为区别在于这里。
“str="/dev/tty",那么系统会分配地址,这样str的地址是随机的。”
系统没有分配地址,str的数值是固定的。就和全局ctermid_name是固定的一样。因为"/dev/tty"是固定地址。
在看APUE时遇到一个问题,问题如下:
#include <stdio.h>
#include <string.h>
static char ctermid_name[L_ctermid];
char *
ctermid(char *str)
{
if (str == NULL)
str = ctermid_name;
return(strcpy(str, "/dev/tty")); /* strcpy() returns str */
}
在这个函数里,为啥用strcpy给指针赋值,而不直接赋值呢?
用以下简图来说明楼主的问题,直接赋值和拷贝是不一样的且为什么用拷贝而不用直接赋值.
strcpy(str."/dev/tty")
______________
str-------->|__|__|__|__|__|
^
|copy过去 覆盖原有内容.
________|_____
|/dev/tty/0 |
----------------
str="/dev/tty"
____________
str<------|/dev/tty/0 | 只把字符指针传给str,而str指的原来区域的内容未改变.引起的可能后果就
---------------
是原来str指向的那块内存丢失,内存泄漏
- 关于字符串的赋值和strcpy 的区别
- 指针直接赋值和strcpy的区别
- 关于字符串赋值=和strcpy问题
- 关于 字符串的赋值 char *strcpy(char *dest ,char *src) 中越界问题
- Strcpy和Strncpy的区别
- memcpy()和strcpy的区别
- Strcpy和Strncpy的区别-
- Strcpy和Strncpy的区别
- Strcpy和Strncpy的区别
- strdup和strcpy的区别
- strcpy 和 strncpy的区别
- memcpy 和strcpy的区别
- strcpy和strncpy的区别
- strcpy和strcat的区别
- memcpy和strcpy的区别
- strcpy()和strncpy()的区别
- strcpy和memcpy的区别
- strcpy和memcpy的区别
- Flash CS3无法导出测试影片问题解决
- ARM体系结构与编程学习(十一)
- [转帖]30岁大叔的自白:我们回不去了
- 【爸耕田去】专辑的原唱
- 基于Web的Android平台百度地图
- 关于字符串的赋值和strcpy 的区别
- FBO【ZT】
- oracle 通过rownum实现分页
- 新boj3
- tomcat7解决package javax.servlet does not exist的问题
- HDU1403 Longest Common Substring 后缀数组
- zoj 2727 list the books
- 关于chrome浏览器的编译
- Windows下命令工具PowerCmd