写脚本写傻了?

恨天低 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++开发经验,我是不是写脚本写傻了???

...全文
530 点赞 收藏 26
写回复
26 条回复
naw0011 2013年08月24日
看string的复制构造有没有重载这种类型。
回复 点赞
wintree 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日
构造函数,表示同意楼上的
回复 点赞
金丝龙麟闪电劈 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里,赋值就会出错。
回复 点赞
珍惜生命远离CPP 2013年08月21日
有问题
回复 点赞
孤影品茗 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指针的位置)读取和写入数据的行为都是不允许的 这块内存是不可读 不可写的权限高 所以运行时会出错; 至于脚本语言 由于没学过 所以不懂噻
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告