📄 subject_33745.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 <iostream.h><BR>#include <string.h><BR>class A<BR>{<BR>public:<BR> A(char *m)<BR> {<BR> strcpy(name,m);<BR> cout<<"A called"<<endl;<BR> }<BR>protected:<BR> char name[5];<BR>};<BR>class B:public A<BR>{<BR>public:<BR> B(char *nm):A(nm)<BR> {}<BR> void printname();<BR>};<BR>void B::printname()<BR>{<BR> cout<<name<<endl;<BR>}<BR>void main()<BR>{<BR> B b1("hahahaha");<BR> 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");--->m="hahahaha"<BR>strlen(m)=8>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");--->m="hahahaha"<BR>strlen(m)=8>strlen(name)-1=5-1=4<BR>name[5]是字符型的数组,共可存5个字符,最后一个应存'\0'作为字符串结束符,所以实际可以存4个字符,而你的m是字符指针,它的长度不可以超过4<BR><BR>应改为:<BR>B b1("hahahaha");--->m="hahahaha"<BR>strlen(m)=8>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 + -