写脚本写傻了?

恨天低 2013-08-16 09:38:32
最近一直写脚本,Python,Perl,PHP ...

今天有人问我一个问题,大概这样:
#include <string>
using namespace std;

char * lpStr = NULL;
string loStr = lpStr;

这样的代码有没问题。

我大概犹豫了10s,答曰:好像没问题啊!我不会啊!!

2010.7~2013.4的C,C++开发经验,我是不是写脚本写傻了???

...全文
600 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
naw0011 2013-08-24
  • 打赏
  • 举报
回复
看string的复制构造有没有重载这种类型。
ctreewang 2013-08-22
  • 打赏
  • 举报
回复
引用 楼主 icechenbing 的回复:
最近一直写脚本,Python,Perl,PHP ... 今天有人问我一个问题,大概这样: #include <string> using namespace std; char * lpStr = NULL; string loStr = lpStr; 这样的代码有没问题。 我大概犹豫了10s,答曰:好像没问题啊!我不会啊!! 2010.7~2013.4的C,C++开发经验,我是不是写脚本写傻了???
这么写,必然有问题,自己封装的string,应该会重载= 其实我的第一感觉是不伦不类的。现在一直写纯C代码,都不用string了。 就是char* 和char[]; 冰哥啥时候推荐我我啊
xiaohutushen30 2013-08-22
  • 打赏
  • 举报
回复
引用 7 楼 zhzz2012 的回复:
char * lpStr = NULL;
string loStr = lpStr;
嗯 这个编译自然是没有问题的 应为编译器不会去检查一个指针到到底指向的是那块内存,但是由于在string的构造函数里面要拷贝char *开头的那个字符串 自然要访问这块内存 但是不巧的是 凡是试图在0号内存(NULL指针的位置)读取和写入数据的行为都是不允许的 这块内存是不可读 不可写的权限高 所以运行时会出错; 至于脚本语言 由于没学过 所以不懂噻
这个解释的感觉很合理!
beyondhaikuo 2013-08-22
  • 打赏
  • 举报
回复
构造函数,表示同意楼上的
  • 打赏
  • 举报
回复
#include <string> using namespace std; char * lpStr = NULL; string loStr = lpStr; ------哈哈,我原来一直用C#写程序,就犯过这样的错误,C#中对象可以为NULL的,但在C++中NULL是对指针来说,对象就是个实体.....
恨天低 2013-08-22
  • 打赏
  • 举报
回复
引用 21 楼 wallwind 的回复:
[quote=引用 楼主 icechenbing 的回复:] 最近一直写脚本,Python,Perl,PHP ... 今天有人问我一个问题,大概这样: #include <string> using namespace std; char * lpStr = NULL; string loStr = lpStr; 这样的代码有没问题。 我大概犹豫了10s,答曰:好像没问题啊!我不会啊!! 2010.7~2013.4的C,C++开发经验,我是不是写脚本写傻了???
这么写,必然有问题,自己封装的string,应该会重载= 其实我的第一感觉是不伦不类的。现在一直写纯C代码,都不用string了。 就是char* 和char[]; 冰哥啥时候推荐我我啊 [/quote] 喜欢写脚本你就来吧!
woshinia 2013-08-21
  • 打赏
  • 举报
回复
basic_string(const _Elem *_Ptr)
		: _Mybase()
		{	// construct from [_Ptr, <null>)
		_Tidy();
		assign(_Ptr);
		}
在vs2012里,赋值就会出错。
  • 打赏
  • 举报
回复
有问题
孤影品茗 2013-08-21
  • 打赏
  • 举报
回复
cannot conver "char *" to "string"????!!!
赵4老师 2013-08-21
  • 打赏
  • 举报
回复
摒弃string,使用char []
Defonds 2013-08-21
  • 打赏
  • 举报
回复
试一下吧,空想不如尝试
恨天低 2013-08-21
  • 打赏
  • 举报
回复
自己写string类,可以保证不出问题的。 看了string实现,在strlen出现访问空指针core dump.
hongwenjun 2013-08-21
  • 打赏
  • 举报
回复
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. 运行时错误了
ForestDB 2013-08-21
  • 打赏
  • 举报
回复
同意LS的。 Constructs the string with the contents of null-terminated character string pointed to by s. The length of the string is determined by the first null character. s must not be a NULL pointer.
mujiok2003 2013-08-21
  • 打赏
  • 举报
回复
精神还在就好, 细节忘了可以理解。
modyaj 2013-08-21
  • 打赏
  • 举报
回复
如果支持 string loStr(lpStr);的话 那么楼主的代码应该也没啥问题 很不幸 我的编译器连string loStr(lpStr);都不支持 更别说让它自己转了
nickwu1220 2013-08-21
  • 打赏
  • 举报
回复
第一感觉string loStr应该是空。 看了源码,知道错了。 VS2010,

basic_string(const _Elem *_Ptr)
		: _Mybase()
		{	// construct from [_Ptr, <null>)
		_Tidy();
		assign(_Ptr);
		}

zh852 2013-08-21
  • 打赏
  • 举报
回复
你突然问我 我也不会 天天在不同语言之间切来切去 很难记住这个
再说了使用C++时,基本上很少使用cstring类,都是用char[],TChar[]等等
大神送一血 2013-08-21
  • 打赏
  • 举报
回复
感觉写脚本写多了,确实有时候有点转不过来。
在河之洲 2013-08-17
  • 打赏
  • 举报
回复
char * lpStr = NULL;
string loStr = lpStr;
嗯 这个编译自然是没有问题的 应为编译器不会去检查一个指针到到底指向的是那块内存,但是由于在string的构造函数里面要拷贝char *开头的那个字符串 自然要访问这块内存 但是不巧的是 凡是试图在0号内存(NULL指针的位置)读取和写入数据的行为都是不允许的 这块内存是不可读 不可写的权限高 所以运行时会出错; 至于脚本语言 由于没学过 所以不懂噻
加载更多回复(6)

65,187

社区成员

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

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