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

📄 subject_36734.htm

📁 vc
💻 HTM
字号:
<p>
序号:36734 发表者:super_xxx_xxx 发表日期:2003-04-18 09:00:57
<br>主题:关于char * 的问题
<br>内容:请各位大虾为我解释一下下面的代码:<BR><BR>//strcpy(), 字符串拷贝. <BR>char *strcpy(char *destination, const char *source) <BR>{ <BR>&nbsp;&nbsp; while(*destinaton++=*source++); <BR>&nbsp;&nbsp; return (destination-1); <BR>} <BR><BR>最后为什么返回(destination -1 ),它的经过 ++ 运算不是已经到了字符串的尾部了吗?<BR>还有(*destinaton++=*source++)会有什么结果?为什么会是true or false?<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>
回复者:wowow 回复日期:2003-04-18 10:01:18
<br>内容:1.当*destinaton等于0时,表示拷贝结束,而false在内存中的值就是0,所以拷贝结束就表示循环终止;<BR>2.由2可知,当拷贝结束时destinaton指针多移了一个字节位置,destinaton-1表示返回destinaton最后一个字符的地址;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:super_xxx_xxx 回复日期:2003-04-18 10:39:09
<br>内容:不对吧,这是strcpy()的源代码, 它最后返回的应该是destination字符串的地址才对!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:super_xxx_xxx 回复日期:2003-04-18 10:42:25
<br>内容:*destinaton最后为什么会等于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>
回复者:super_xxx_xxx 回复日期:2003-04-18 10:48:27
<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>
回复者:wowow 回复日期:2003-04-18 10:50:46
<br>内容:为什么要返回一个char *,就是为了可以实现连续拷贝,当连续拷贝时,后面的内容当然要放在destinaton的最后面,如果返回destination的起始地址,连续拷贝就没有意义了,因为它会覆盖前面拷贝的内容。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-18 10:55:05
<br>内容:答复*destinaton最后为什么会等于0:<BR>source的最后一个字节就是0,这是系统给char *类型的东东自动设定的。<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>
回复者:super_xxx_xxx 回复日期:2003-04-18 11:24:30
<br>内容:如果返回的是destination字符串的末地址,那我还怎么引用这个字符串?<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>
<font color=red>答案被接受</font><br>回复者:wowow 回复日期:2003-04-18 12:16:55
<br>内容:参数指针传进来时,已经把该指针复制了一份,所以你在栈内移动指针只是移动了复制的指针位置,并不会作为参数的指针的位置,你外面照常用destination好了,它还是指向destination的头地址,只不过里面的内容被改变了。<BR>另外,destinaton-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>
回复者:gun_1981 回复日期:2003-04-20 09:32:22
<br>内容:while(*destinaton++=*source++); //先将*source赋给*destination,故*destination已得到'\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>
回复者:wowow 回复日期:2003-04-20 20:59:12
<br>内容:hamburger说得对,这是我的疏忽.<BR>super_xxx_xxx,如果你对我的解释满意的话,请给点分意思意思吧.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ljb 回复日期:2003-04-20 21:20:28
<br>内容:wowow,我的一本资料书上说返回目标指针的首地址啊,而且还有例子,(我没有试过:))到底是返回首地址还是目标地址啊?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-20 21:35:49
<br>内容:答案正如我在第5楼的回答.<BR>如果你不信的话,建议你做一个Debug(不要跟踪strcpy,它会把你带到汇编语言中,当然如果你有汇编的基础,你可以看看),你只要在你的程序中定义一个和strcpy内容相同,名称不同的函数,然后跟踪进去看看就明白了.<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>
回复者:super_xxx_xxx 回复日期:2003-04-21 08:46:59
<br>内容:谢谢,wowow我周六,周日没上网所以回复的晚了点请原谅。按你的说法destination在函数返回时还是指向首地址的,那么return (destination-1);的意义何在?<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>
回复者:wowow 回复日期:2003-04-21 09:09:35
<br>内容:请参考我在第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>
回复者:super_xxx_xxx 回复日期:2003-04-21 09:30:54
<br>内容:为什么要返回一个char *,就是为了可以实现连续拷贝,当连续拷贝时,后面的内容当然要放在destinaton的最后面,如果返回destination的起始地址,连续拷贝就没有意义了,因为它会覆盖前面拷贝的内容。 <BR><BR>对不起,我还是不明白,这和连续拷贝有什么关系,destination在函数返回时还是指向首地址,那是不是不返回任何值也可以呢?我还是不清楚return (destination-1)有什么用。<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>
回复者:ljb 回复日期:2003-04-21 09:36:04
<br>内容:wowow,要是给段代码就好了:)伪代码也行:)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-21 11:21:39
<br>内容:1.我怀疑你这段代码不是strcpy的原码,倒像是strcat的原码。<BR>2.我假定你的原码是strcat,假设你有两个字串,想把它们合并到一个子串中:<BR>&nbsp;&nbsp;// p1、p2合并到p中<BR>&nbsp;&nbsp;char *p1 = "12345";<BR>&nbsp;&nbsp;char *p2 = "abcde";<BR>&nbsp;&nbsp;char *p = new char[100];<BR>&nbsp;&nbsp;memset(p, 0, 100);<BR>&nbsp;&nbsp;// 不用返回的字串<BR>&nbsp;&nbsp;strcat(p, p1);<BR>&nbsp;&nbsp;strcat(&amp;p[5], p2);<BR>&nbsp;&nbsp;// 利用返回的字串<BR>&nbsp;&nbsp;strcat(strcat(p, p1), p2);<BR>&nbsp;&nbsp;delete p;<BR>&nbsp;&nbsp;二者的结果是相同的,哪个操作容易我想是一目了然的。不用返回的字串,你必须计算要插入的位置,使用返回的字串,你就不必管这些事情了。<BR>3.当strcpy、strcat混合使用的时候,这些返回的字串的作用是极大的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-21 11:31:49
<br>内容:从返回字串的作用来说,我认为strcpy的返回值没有strcat那么有用。<BR>另外,返回字串的另一个作用是可以得到字串的长度(strlen)。<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>
回复者:super_xxx_xxx 回复日期:2003-04-21 11:35:34
<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-04-21 12:58:39
<br>内容:我也同意17楼的看法,1楼老兄给的肯定不是strcpy()函数的定义,是象strscat() 的定义。strcpy()函数是要把原字符串复制到目的地址中,返回的肯定是目的地址的首地址,(也就是字符第一个字符的地址),一楼给出的定义怎么解释都不象是首地址啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ljb 回复日期:2003-04-21 14:24:12
<br>内容:我查了MSDN上面给出的strcpy和strcat的返回值分别是:<BR>strcpy():<BR>Each of these functions returns the destination string. No return value is reserved to indicate an error<BR>strcat():<BR>Each of these functions returns the destination string (strDestination). No return value is reserved to indicate an error<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>
回复者:super_xxx_xxx 回复日期:2003-04-22 08:29:23
<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>
回复者:wowow 回复日期:2003-04-22 08:50:30
<br>内容:char *pSave = pDestination;<BR>while(...);<BR>return pSave;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:super_xxx_xxx 回复日期:2003-04-22 08:59:07
<br>内容:知道了,先保存一下就可以了。
<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 + -