一个简单的问题?

guoxiny 2003-02-25 06:03:07
有一个函数,如

print(char* p)
{
cout << p << endl;
}

char* d;
print(d);//如果d是空的则会出现错误.

请问在print中如何判断这个p的有效性?
...全文
27 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
allen1981813 2003-02-25
  • 打赏
  • 举报
回复
assert(p!=0);
fiveyes 2003-02-25
  • 打赏
  • 举报
回复
同意顶楼。

空指针出错是件好事情啊。

让所有的错误都出现在编译期是每个程序员的梦想……

可它偏偏编译的时候不出错,你运行的时候不出错,你的同行测试的时候它还不出错,你的老板把软件往他的机器上装完一运行,它就出错了……
Frank001 2003-02-25
  • 打赏
  • 举报
回复
不可预期的错误,因为指针d没有初始化。
晨曦2003 2003-02-25
  • 打赏
  • 举报
回复
永不后悔!
wsmall 2003-02-25
  • 打赏
  • 举报
回复
你为什么要使用这种不安全的指针呢?以后你会后悔的。
point_to 2003-02-25
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
using namespace std;
void print(char* p)
{
if(!p)
cout << p << endl;
else
cout<<"p is null!! "<<endl;
}


int main(int argc, char* argv[])
{

char* d;
print(d);//如果d是空的则会出现错误.

return 0;
}
zhouzhaohan 2003-02-25
  • 打赏
  • 举报
回复
char *d是没有初始化的野指针,理论上讲它可能是任何值。
系统不会帮你判断有效性,它是什么,系统就怎么处理。如果它碰巧是个有效的地址,系统就会把地址位置的东西都打出来,直到碰到'\0'为止。
root60931 2003-02-25
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
print(d);//如果d是空的则会出现错误.
请问在print中如何判断这个p的有效性?

所以应该在定义char *p;后 p=0;给它赋值为空!
然后:
print(char* p)
{
if(p)
cout << p << endl;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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