⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_33745.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:33745 发表者:小抱枕 发表日期:2003-03-23 22:12:11
<br>主题:请教小问题——谢谢!!!
<br>内容:下面程序中<BR>为什么char name[5];不能是char name;<BR>而且char name[5];中的5要是变成4就会无穷执行为什么那?<BR><BR><BR><BR><BR>#include &lt;iostream.h&gt;<BR>#include &lt;string.h&gt;<BR>class A<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;A(char *m)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(name,m);<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"A called"&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;char name[5];<BR>};<BR>class B:public A<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;B(char *nm):A(nm)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{}<BR>&nbsp;&nbsp;&nbsp;&nbsp;void printname();<BR>};<BR>void B::printname()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;name&lt;&lt;endl;<BR>}<BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;B b1("hahahaha");<BR>&nbsp;&nbsp;&nbsp;&nbsp;b1.printname();<BR>}<BR><BR><BR><BR><BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:zjllyy 回复日期:2003-03-24 10:36:19
<br>内容:strcpy是字符串的copy,参数为字符串首地址,<BR>char name[5]表示一个长度为5的字符串,内存只开辟5个字节,你要copy多余4个字符,就益处了,也就是说,你strcpy()的原字符串长度不能超过目标字符串长度-1,其中有一个'\0'。
<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-03-24 16:39:39
<br>内容:char型不是只有1个长度吗,你说的原字符串是不是指m,目标字符串是name,并没有超啊
<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-03-24 22:33:36
<br>内容:char name[5]不是数组吗
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:zjllyy 回复日期:2003-03-25 09:02:31
<br>内容:B b1("hahahaha");---&gt;m="hahahaha"<BR>strlen(m)=8&gt;strlen(name)-1=5-1=4<BR>name[5]是字符型的数组,共可存5个字符,最后一个应存'\0'作为字符串结束符,所以实际可以存4个字符,而你的m是字符指针,它的长度不可以超过4<BR><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-03-25 11:53:31
<br>内容:不好意思再问一下,字符指针的长度怎么知道那?是sizeof()吗?
<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-03-25 12:31:49
<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-03-25 17:39:01
<br>内容:再问一下<BR>m="hahahaha"strlen(m)=8,不是超过4了吗,怎么回事<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>
回复者:zjllyy 回复日期:2003-03-26 09:43:36
<br>内容:你分配的name为5个字符,而copy个它8个字符,系统就会顺序存储到内存中,后面的那块内存会被非法修改,你没发现程序运行后有abnormal program termination。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mimibaby 回复日期:2003-03-26 10:54:31
<br>内容:B b1("hahahaha");---&gt;m="hahahaha"<BR>strlen(m)=8&gt;strlen(name)-1=5-1=4<BR>name[5]是字符型的数组,共可存5个字符,最后一个应存'\0'作为字符串结束符,所以实际可以存4个字符,而你的m是字符指针,它的长度不可以超过4<BR><BR>应改为:<BR>B b1("hahahaha");---&gt;m="hahahaha"<BR>strlen(m)=8&gt;strlen(name)-1=4-1=3<BR>name[5]是字符型的数组,共可存5个字符,最后一个应存'\0'作为字符串结束符,所以实际可以存4个字符,而你的m是字符指针,它的长度不可以超过4<BR><BR>这才是正确答案!<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>
回复者:zjllyy 回复日期:2003-03-26 14:12:00
<br>内容:是我疏忽了,我的意思就是最多是比分配的字符数少1。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -