| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 569 人关注过本帖
标题:小问题,朋友们,帮帮忙!
只看楼主 加入收藏
蓝天c语言
Rank: 2
等 级:论坛游民
帖 子:52
专家分:45
注 册:2010-8-27
结帖率:82.61%
收藏
已结贴  问题点数:10 回复次数:5 
小问题,朋友们,帮帮忙!
#include<stdio.h>
#include<string.h>
main()
{
    char *str1="you are a boy";
    char a[13];
    int *p;
    strcpy(p=a+1,str1);
    printf("%s",str1);
}
这样运行程序正确,为什么不能把strcpy(p=a+1,str1);改为strcpy(p=++a,str1)或者strcpy(++a,str1)?
知道的详细说明一下理由,谢谢啦!
搜索更多相关主题的帖子: 朋友 
2010-09-08 18:09
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:3 
a+1是将指针从第一个字符移动到第二个字符,++a是将a的地址值加一,那就全乱了
例如 3684-》368c                            3684->3685
2010-09-08 18:25
风兮飞扬
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-09-08 18:40
Windy0Winll
Rank: 2
来 自:走了
等 级:等待验证会员
帖 子:71
专家分:90
注 册:2010-8-26
收藏
得分:5 
以下是引用蓝天c语言在2010-9-8 18:09:41的发言:

#include
#include
main()
{
    char *str1="you are a boy";
    char a[13];
    int *p;
    strcpy(p=a+1,str1);
    printf("%s",str1);
}
这样运行程序正确,为什么不能把strcpy(p=a+1,str1);改为strcpy(p=++a,str1)或者strcpy(++a,str1)?
知道的详细说明一下理由,谢谢啦!

这么短的代码,问题还真不少, int *p;strcpy(p=a+1,str1);这两句话写的很不好。
我给出一般的C库strcpy函数的原型: char * strcpy( char * ,const char * );它的第一个参数可是char *的类型的哦,而您的却是int *,一般编译器会有警告的。
最好改成char *p=a+1;strcpy(p,str1); 或者char *p=strcpy(a+1,str1);

改为strcpy(p=++a,str1)或者strcpy(++a,str1),为什么不行呢?
 这里面的a您可是申明的是字符数组哦,我想您应该知道数组名的值是不能改变的。
1。其实数组和普通变量是差不多的,比如有int i =1;系统会自动分配空间来存储这个1,并且可以这样理解,这个空间的名字是i.然而您突然后悔了,想把那个空间重新命名为j,很显
   然是不可以的(您可能会说C++中的引用,这是C语言,我不讨论了)。
2。数组名和普通变量的地址也非常相似,数组名本就是数组的首地址。还是用上面那个例子,int i=1;给1分配了空间后,那么那个地址就是固定下来了,也就是说不能改变这个地址
   的。如果您想写成这样 &i = (int *)0xff;当然是不能通过编译的。这样类似表达式是不能做左值的。您代码中的++a也和这是一个道理。

悄悄地来。。。 然后悄悄地走。。。。。。
2010-09-08 19:55
cacker
该用户已被删除
收藏
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2010-09-08 20:02
小旬_C
Rank: 2
等 级:论坛游民
帖 子:72
专家分:33
注 册:2010-7-25
收藏
得分:0 
学到

没有失败,只有暂时停止成功
2010-09-08 20:47
快速回复:小问题,朋友们,帮帮忙!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030442 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved