当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : strcpy探深
帖子发表于 : 2010-01-02 12:25 
头像

注册: 2009-10-06 16:42
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
描述strcpy的工作原理
char *strcpy(char *to,char const * from)
{
char *save = to;
for(;(*to = *from) != '\0';++to,++from);
return save;
}

可是这个参数to,只能接受指针常量(char message[] = "Hello,World"),不能接受指针变量(char *str = "Hello,World")...
请问高手这是为什么啊???


_________________
If I rest, I rust


页首
 用户资料  
 
2 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-02 17:30 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274

实际使用,都是指针赋值的啊。[]表示有实际申请了的地址而已。
研究这些啊。记得有一本书,是c函数源码的。scanf printf的,占了几十页。所以小内存应用,别用这2个函数。lol


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-03 11:14 
头像

注册: 2009-10-06 16:42
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
eexpress, 谢谢回答!就是在这个方面比较迷糊,知道str[]中str是指针常量,char *str 中 str是指针变量.可用在上面应该没有什么 不同啊,猜是*str中赋的是一个不确定的地址,然后strcpy和strcat这类函数不能接受。有点晕


_________________
If I rest, I rust


页首
 用户资料  
 
4 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-03 11:18 
头像

注册: 2009-09-20 19:30
帖子: 765
地址: GIS
系统: ubuntu12.04
送出感谢: 0 次
接收感谢: 0 次
也有可能是头文件的原因。。。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-03 12:28 
头像

注册: 2008-06-18 22:02
帖子: 186
送出感谢: 0 次
接收感谢: 1
1. char message[] = "Hello,World"
在当前作用栈储存区申请足够内存以储存"Hello,World",并将头指针放入变量message。message是char数组(作为函数参数退化为char *)
2.char *str = "Hello,World"
在全局静态储存区申请足够内存以储存"Hello,World",将其标为常量并将其头指针(即为const char *)放入变量str。str是char指针


页首
 用户资料  
 
6 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-03 12:37 
头像

注册: 2007-08-05 17:40
帖子: 4979
送出感谢: 0 次
接收感谢: 6
用gdb disassemble 一下就知道了。


_________________
free VPN
YouKuDownLoader
代码:
pip3 install ykdl

install YouKuDownLoader, have fun in downloading.
YouKuDownLoader所支持网站列表


页首
 用户资料  
 
7 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-04 11:52 
头像

注册: 2009-10-06 16:42
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
wenstream 写道:
1. char message[] = "Hello,World"
在当前作用栈储存区申请足够内存以储存"Hello,World",并将头指针放入变量message。message是char数组(作为函数参数退化为char *)
2.char *str = "Hello,World"
在全局静态储存区申请足够内存以储存"Hello,World",将其标为常量并将其头指针(即为const char *)放入变量str。str是char指针

谢谢回答,学习


_________________
If I rest, I rust


页首
 用户资料  
 
8 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-04 12:51 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
实际上strcpy可以4字节4字节或者8字节8字节的复制
研究一遍glibc源码就知道,很多函数没想象的那么简单


_________________
目前负债150多万


页首
 用户资料  
 
9 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-04 13:39 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
因为

第一个是指向变量的指针常量
第二个是指向常量的指针变量


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-04 19:13 
头像

注册: 2009-10-06 16:42
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
xhy 写道:
实际上strcpy可以4字节4字节或者8字节8字节的复制
研究一遍glibc源码就知道,很多函数没想象的那么简单

同意。


_________________
If I rest, I rust


页首
 用户资料  
 
11 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-06 13:53 
头像

注册: 2008-03-23 0:39
帖子: 770
送出感谢: 0 次
接收感谢: 4
这个跟strcpy没什么关系。问题在于你修改str所指向的内存空间(当char *str="ee在说什么?"), str这样初始化时,所指向的内存空间是只读的。恩,楼主可以去看下c faq。楼主用的是什么资料?


页首
 用户资料  
 
12 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-06 18:05 
头像

注册: 2008-03-23 0:39
帖子: 770
送出感谢: 0 次
接收感谢: 4
楼主请看这个:
http://c-faq-chn.sourceforge.net/ccfaq/node16.html


页首
 用户资料  
 
13 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-06 18:38 
头像

注册: 2009-02-22 14:15
帖子: 173
送出感谢: 0 次
接收感谢: 0 次
只要分配了空间(自动或手动),都可以的啦。好好打好 基础吧 :em02 。。。


_________________
Desire Freedom, Love Beauty, Keep Hacking。


页首
 用户资料  
 
14 楼 
 文章标题 : Re: strcpy探深
帖子发表于 : 2010-01-15 22:08 
头像

注册: 2008-02-12 19:47
帖子: 262
送出感谢: 0 次
接收感谢: 0 次
char *str = "xxx"这种其内容是不可修改的,当然不能给它赋值。C这玩意细究起来还是非常有说道的,典型一个数组和指针的关系就够初学者理解一阵子了


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译