标题:考考大家^_^
只看楼主
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
已结贴  问题点数:100 回复次数:15 
考考大家^_^
#include<iostream>
#include<cstdio>
using namespace std;


int main()
{
    char *src = "hello";
    char *dest = &src[1];
    while( (*dest++ = *src++)!='\0');
    *dest++='\0';
    cout << dest << endl;
    return 0;
}
你觉得上面的代码对吗??
如果错了 有几处错误啊?? 原因是什么
搜索更多相关主题的帖子: include hello 
2011-07-06 18:48
西元前的D调
Rank: 2
等 级:论坛游民
帖 子:15
专家分:78
注 册:2011-6-20
得分:10 
沙发!
2011-07-06 19:17
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:10 
int main()
{
    char *src = "hello";//hello字符串存放在只读数据区
    char *dest = &src[1];//dest指向了只读数据区
    while( (*dest++ = *src++)!='\0');//这句肯定是非法内存访问  因为要修改只读数据区的数据
    *dest++='\0';//同上
    cout << dest << endl;
    return 0;
}


[ 本帖最后由 laoyang103 于 2011-7-6 19:55 编辑 ]

                                         
===========深入<----------------->浅出============
2011-07-06 19:22
西元前的D调
Rank: 2
等 级:论坛游民
帖 子:15
专家分:78
注 册:2011-6-20
得分:0 
貌似3楼正解。我想起来了,书上有说过,字符串是只读的,字符数组才能写。这错误debug时直接报出了一行看不懂的鸟语。。。
2011-07-06 19:28
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
得分:10 
不亲自运行,还真看不出是内存的错误
既然是字符串拷贝,忍不住想改一改
以实现功能上的需求
程序代码:
#include<iostream>
#include<cstdio>
using namespace std;


int main()
{
    char *src = "hello";
    char a[10]="";
    char *dest = a;
    char *temp = dest;
    while( (*dest++ = *src++)!='\0');
    *dest++='\0';
    cout << temp << endl;
    return 0;
}


[ 本帖最后由 Pirelo 于 2011-7-6 19:48 编辑 ]
2011-07-06 19:46
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 3楼 laoyang103
还有个错误没找到
2011-07-06 20:55
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 5楼 Pirelo
其实你的代码也没有实现他想要的功能
她想要实现的功能是要实现strcpy(dest,src);
dest指向src的第二个元素地址
2011-07-06 20:58
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
得分:10 
程序代码:
#include<iostream>//这个程序让我感觉到了匪夷所思。
#include<cstdio>
using namespace std;


int main()
{
    char *src = "hello";//char型指针src指向"hello"文件
    char *dest = &src[1];//char型指针dest指向'e'的地址
    while( (*dest++ = *src++)!='\0');//非法的指针操作
    *dest++='\0';//虽说指针的操作是需要练习和尝试的。但是类似这种操作是没有必要用只针吧?解释同上。
    cout << dest << endl;
    return 0;
}


[ 本帖最后由 yangfanconan 于 2011-7-6 21:35 编辑 ]
2011-07-06 21:33
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
得分:10 
回复 6楼 草狼
while的控制语句?不懂你跳出循环的那句是咋回事,后面还直接写了分号。总之,问题很多,老杨说的很清楚了。不懂楼主贴出来要给大家啥启示。求解!
2011-07-06 23:40
hello_jwei
Rank: 2
等 级:论坛游民
帖 子:4
专家分:28
注 册:2011-6-14
得分:10 
出去只读存储的问题
while( (*dest++ = *src++)!='\0');
也会死循环,dest被赋值成前一个字符,永远不会是'\0'
2011-07-07 08:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-344876-1-1.html




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

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