📄 subject_39186.htm
字号:
<p>
序号:39186 发表者:骁霄笑 发表日期:2003-05-08 20:15:23
<br>主题:why?
<br>内容:#include<iostream.h><BR>#include<string><BR>void main()<BR>{<BR> char *a=new char[4];<BR> cout<<strlen(a)<<endl;<BR>}<BR>结果是9,why?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:theta 回复日期:2003-05-08 20:42:00
<br>内容:strlen(a)实际上是找到字符串结束标记'\0'为止,而a只是分配了4字节内存,并没有明确初始化,因此输出可能随机的。结果是9,是一种巧合。不同情况运行,结果可能不同。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:shabby 回复日期:2003-05-08 22:49:53
<br>内容:在VC++中,字符开辟2个字节,所以是8,再加上0一个,是9。<BR>有问题,可以给我email。<BR>我刚来这个网站,是我导师说的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BB头 回复日期:2003-05-09 01:06:09
<br>内容:我认为并不是这样,这调试时把char *a=new char[4];中的char[X]<BR>(注0<=X<=4)结果仍为9;请高手多加指教。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:罗兹维尔 回复日期:2003-05-09 08:39:00
<br>内容:这只能去问编译器了<BR>和new在堆中开辟内存的机制有关
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:骁霄笑 回复日期:2003-05-15 11:44:46
<br>内容:字符怎么会占两个字节?请指教!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:(zl剑客) 回复日期:2003-05-15 14:53:58
<br>内容:是因为char *a=new char[4];<BR>这内存块中并没有初始化或赋值,所以求出的其中字符的个数是一个错误的值!<BR><BR>改为这样就可以看出为什么了:<BR>char *a=new char[4];<BR><BR>strcpy(a,"wow");<BR>cout<<strlen(a)<<endl; // strlen(a) == 3<BR><BR>delete a;<BR><BR><BR><BR>2003-5-15 14:57:02
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -