new char和new char[]

showming 2010-08-02 05:06:12
#include<iostream>
#include "stdio.h"

using namespace std;

char * reverse(char* src)
{
char *start=src;
char *dest=new char; //我理解的这里是这个指针只能存放一个字符吗?但是程序运行结果不是这样,即使多个
char *result=dest; 字符也可以,另外改成new char[100]也可以。
while(*src++);
char *begin=src-2,*end=src-2;
while (begin-->start)
{
if(' '==*begin||begin==start)
{ char *pt=begin-1;
if (begin!=start)
begin+=1;
while(begin<=end)
{
*dest++=*begin++; //get the last word
}

begin=pt;
end=pt;
*dest++=' ';
}
}
*dest='\0';
return result;
}

int main()
{
char *s="idf am a student";
cout<<s<<endl;
cout<<reverse(s)<<endl;
return 0;
}
...全文
317 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
山书生 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengzhixi 的回复:]
越界访问的后果自己负责,编译器不会帮你检查的。
[/Quote]
越界访问是个大问题……
wbqpcx 2010-08-02
  • 打赏
  • 举报
回复
char *dest=new char,之后,dest指向堆的一个地址,dest++会一直增加其地址,可以随意修改地址内容,只不过可能会导致内存覆盖。后果不堪设想。
liutengfeigo 2010-08-02
  • 打赏
  • 举报
回复
越界访问的后果自己负责,行为未定义
hslinux 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengzhixi 的回复:]

越界访问的后果自己负责,编译器不会帮你检查的。
[/Quote]

~~~~~~~~
houleiyang 2010-08-02
  • 打赏
  • 举报
回复
这个问题我学链表的时候也遇到过,印象非常深。指针越界,编译是不会报错的,但运行会出错。当时我一头雾水!
Wind_Runner 2010-08-02
  • 打赏
  • 举报
回复
一个申请单个对象,另一个申请对象数组
pengzhixi 2010-08-02
  • 打赏
  • 举报
回复
越界访问的后果自己负责,编译器不会帮你检查的。
xy_zhang 2010-08-02
  • 打赏
  • 举报
回复
另外,你分配了却没有释放,会导致内存泄漏。
  • 打赏
  • 举报
回复
new char 只会分配一个字节,你用到后面的字节,是因为后面的内存恰好没有被占用,否则会出错
ayw215 2010-08-02
  • 打赏
  • 举报
回复
new char; 申请的是一个字符
当然,你确实可以访问new出来的多个字符
但是会越界

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧