| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1280 人关注过本帖, 1 人收藏
标题:急:求助c++问题
只看楼主 加入收藏
lyshyhuangli
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-24
收藏(1)
 问题点数:0 回复次数:15 
急:求助c++问题
char* str1="56789";

char* str2="123456789";

strcpy(str1,str2);

cout < <str1 < <endl;

cout < <str2 < <endl;

在debug模式下编译正常,但运行出错;
在release模式下,能正常运行;
答案是:123456789和9.

请高手们分析一下这个结果!!
在线等待……
2008-11-11 21:54
lyshyhuangli
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-24
收藏
得分:0 
怎么没人回复啊!!??
2008-11-12 13:41
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
用数组实现是没问题的
2008-11-12 16:06
cnbj
Rank: 2
等 级:论坛游民
威 望:1
帖 子:67
专家分:55
注 册:2008-11-4
收藏
得分:0 
#include <iostream>
using namespace std;
int main()
{
char *str1="56789";
char *str2="123456789";
str1=new char[20];
strcpy(str1,str2);
cout<<str1<<endl;
cout<<str2<<endl;
delete []str1;
return 0;
}
运行错误是因为把str2复制给str1时,str1的空间不够,也就是内存溢出,所以要重新申请空间
2008-11-12 17:37
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
[bo][un]cnbj[/un] 在 2008-11-12 17:37 的发言:[/bo]

#include
using namespace std;
int main()
{
char *str1="56789";
char *str2="123456789";
str1=new char[20];
strcpy(str1,str2);
cout

如果*str1="123343534654646"就是它本来存储的字符比str2多的时候ms也是不行的?提示段错误,内存不够的问题的应该,这个是为什么呢?
2008-11-12 21:37
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
*str1="123343534654646" 只是存储了 字符串的 首地址
也就是 sizeof str1  4个字节
2008-11-12 22:33
toyix
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-7-14
收藏
得分:0 
[bo][un]newyj[/un] 在 2008-11-12 22:33 的发言:[/bo]

*str1="123343534654646" 只是存储了 字符串的 首地址
也就是 sizeof str1  4个字节

首先认为你说的是对的 ,不过是这样 语句strcpy(d,s);
就一定不是简单的把 指针的值修改了,因为那样就不会溢出,


第二点就是  char *s="Golden Global View";
这样的语句 ="Golden Global View";编译的时候应该存储在文字常量区,那么 strcpy(d,s);就一定不可把 字符串内容复过去,因为这等同于修改常量区,这是不允许的  (我刚学c++,这一点也不是很确定)


这两点 看似矛盾 ,我感觉  这就不可以  用 char *s="Golden Global View";
这种形式定义数组  ,只能用  char s【】=“Golden Global View”这种形式才行 ,因为这样的话s的内容是可以改变的  

还有一个就是 我就 strcpy函数的本质不是很懂   ,到底是 只是改变指针的值  ,还是直接把值复了过去   ?


望指教     QQ494000816  希望加我讨论
2008-11-12 22:50
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
[bo][un]newyj[/un] 在 2008-11-12 22:33 的发言:[/bo]

*str1="123343534654646" 只是存储了 字符串的 首地址
也就是 sizeof str1  4个字节

有点不太明白这个
如果是sizeof(str1)结果是4
如果是sizeof(*str1)结果是1
为什么呢
还有就是存放首地址为什么是占1个字节呢?
2008-11-12 23:28
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
sizeof(str1) 这个是 指针 所以是4个字节
而 sizeof(*str1) 是 一个char类型 所以 就是 1个字节
存放首地址 是用4个字节的
你试试 sizeof &*str1 这个是 几个字节 这个才是 首地址
2008-11-12 23:38
pascale
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-9-9
收藏
得分:0 
[bo][un]newyj[/un] 在 2008-11-12 23:38 的发言:[/bo]

sizeof(str1) 这个是 指针 所以是4个字节
而 sizeof(*str1) 是 一个char类型 所以 就是 1个字节
存放首地址 是用4个字节的
你试试 sizeof &*str1 这个是 几个字节 这个才是 首地址

显示是4个字节
这个首地址存放的类型是什么,或者和类型有关么?
还有就是sizeof(str1)你说是指针所以4个字节。。这个和类型有关么还是指针都是4个字节?
2008-11-12 23:44
快速回复:急:求助c++问题
数据加载中...
 
   



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

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