一段小程序,却有个奇怪的现象??!!望解答

llhbtt 2009-06-09 04:35:23
本人刚接触C++。
#include <iostream.h>

int main(int argc, char *argv[])
{
char *ptr;
char str[10];

cin>>ptr;
cout<<ptr;
system("PAUSE");
return 0;
}

程序说明:输入一个字串,然后将该字串打印出来,就这么简单。
编译环境:Windows XP,Dev-C++

现象1:如上面代码,不进行任何改动,编译通过并且能够运行,而且能够正常显示已输入的字串;

现象2:对上面代码,只要注释掉或去掉“char str[10];”这句,运行崩溃

“现象2”还能理解。因为ptr是个伪指针

主要是“现象1”的结果,太不能理解了,为啥加了句“char str[10];”,用ptr这个伪指针就能显示字串了呢???
本人愚钝。。。希望大侠们指点啊!!!
...全文
34 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jivvuw 2009-06-11
  • 打赏
  • 举报
回复
楼上已经吧问题说的很清楚 了
xiaosaner3 2009-06-11
  • 打赏
  • 举报
回复
野指针正解。
飞天御剑流 2009-06-10
  • 打赏
  • 举报
回复
并非一覆盖就会崩溃的,要看覆盖的内容有什么用途。
jasion_chen 2009-06-10
  • 打赏
  • 举报
回复
这个应该和编译器有关吧
eTouX 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zhangxfeng112 的回复:]
我晕,这么无聊的问题,讨论来讨论去能有什么结果。。。

反正都是错的。。就算表面上运行无误,那它也是错的,存在很大的风险隐患。

在工作中谁要是写这样的代码,建议老板直接把他开掉。

如果你写了这样的代码,被老板发现了,还没被开掉,那建议你赶紧跳槽,因为这家公司早晚要倒闭。。
[/Quote]

牛逼
zhtigt 2009-06-10
  • 打赏
  • 举报
回复
char *ptr;
ptr没有初始化,就能cin>>ptr;编程之大忌!
这种代码是不应该出现的!
huxuanhui 2009-06-10
  • 打赏
  • 举报
回复
长见识了
gumengshiep 2009-06-10
  • 打赏
  • 举报
回复
恩 是的 ptr野指针 不是每次都能通过的
freshui 2009-06-10
  • 打赏
  • 举报
回复
写第一个程序前先看看林锐的 高质量C/C++编程吧
很短,对新手比较有用
freshui 2009-06-10
  • 打赏
  • 举报
回复
现象1:如上面代码,不进行任何改动,编译通过并且能够运行,而且能够正常显示已输入的字串;

能够运行是幸运。
ptr是个野指针,谁知道指向哪啊。
zhangxfeng112 2009-06-10
  • 打赏
  • 举报
回复
我晕,这么无聊的问题,讨论来讨论去能有什么结果。。。

反正都是错的。。就算表面上运行无误,那它也是错的,存在很大的风险隐患。

在工作中谁要是写这样的代码,建议老板直接把他开掉。

如果你写了这样的代码,被老板发现了,还没被开掉,那建议你赶紧跳槽,因为这家公司早晚要倒闭。。
TT_Cly 2009-06-10
  • 打赏
  • 举报
回复
对于char *ptr; 没有开辟内存,当有char str[10]; 时碰巧ptr指到str[10]上去了,所以没有挂掉(估计也是随机的),
建议new点空间给他或直接用std::string.
lambert_s 2009-06-10
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char *ptr;
char str[10];

cin >> ptr;
cout << ptr;
return 0;
}

我把代码改成这样,用GCC崩溃了。。。
我想应该是楼主用的编译器问题吧
volezbin 2009-06-10
  • 打赏
  • 举报
回复
警告 1 warning C4700: 使用了未初始化的局部变量“ptr” d:\my documents\visual studio 2005\projects\testt\testt\maint.cpp 8
犇犇犇程序猿 2009-06-10
  • 打赏
  • 举报
回复
-bash-3.00$ ./s
234
Segmentation Fault (core dumped)
-bash-3.00$ ./s
asd
Segmentation Fault (core dumped)
-bash-3.00$

在solaris下面没这个情况。。。

T技术沙龙 2009-06-10
  • 打赏
  • 举报
回复
我把代码改成这样
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
char *ptr;
char str[10];

cin>>ptr;
cout<<ptr;
system("PAUSE");
return 0;
}

然后编译器报警:
c:\documents and settings\administrator\temp11.cpp(7) : warning C4101: 'str' : unreferenced local variable
c:\documents and settings\administrator\temp11.cpp(9) : warning C4700: local variable 'ptr' used without having been initialized

T技术沙龙 2009-06-10
  • 打赏
  • 举报
回复
在我的机器上运行了vc6.0,和楼主说的不一样啊。估计是编译器的问题
K_s_G 2009-06-10
  • 打赏
  • 举报
回复
en
[Quote=引用 12 楼 supermegaboy 的回复:]
并非一覆盖就会崩溃的,要看覆盖的内容有什么用途。
[/Quote]
llhbtt 2009-06-09
  • 打赏
  • 举报
回复
(void*) ptr 将字符指针 强制转换成空指针 这种合法吗???
pengzhixi 2009-06-09
  • 打赏
  • 举报
回复
编译器做了手脚。
加载更多回复(8)

64,654

社区成员

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

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