免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1363 | 回复: 8
打印 上一主题 下一主题

问个STRCPY的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-12 23:30 |只看该作者 |倒序浏览
#include<iostream>
#include<string>
using namespace std;





void main( void )
{
        char *str = "helloworld" ;

        char strarr[ 5 ];//这里长度为5的时候和长度为4的时候为什么会有区别??!

        StrCpy( strarr, str );

        cout << sizeof( strarr ) / sizeof( strarr[ 0 ] ) << endl;
        cout << "strlen = " << strlen( strarr ) << endl;
        cout << strarr << endl;
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-03-12 23:46 |只看该作者
>>StrCpy
这个干嘛大写?
你能编译过?
都溢出了!

论坛徽章:
0
3 [报告]
发表于 2006-03-13 08:54 |只看该作者
StrCpy大写的因为我之前用了自己写的StrCpy函数,

我这里使用函数的时候是溢出了,篡改了堆栈存储区的内容,但我好不理解的就是,strarr[ 5 ]可以正常运行,strarr[ 4 ] 却不可以。为什么?!

论坛徽章:
0
4 [报告]
发表于 2006-03-13 08:57 |只看该作者
StrCpy函数 怎么实现的

论坛徽章:
0
5 [报告]
发表于 2006-03-13 09:07 |只看该作者
//下面是我写的 ,很容易理解溢出,但是程序的输出让我费解。
char *StrCpy( char *dest, char const  *sour )
{
             assert( dest != NULL && sour != NULL );
             char *pbak = dest;
             while( ( dest++ = sour++ ) != '\0' );

             return pbak;
}

论坛徽章:
0
6 [报告]
发表于 2006-03-13 09:55 |只看该作者
溢出的后果是不可预料的,这里应该也有对齐问题

应该是*dest++ = *sour++

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
7 [报告]
发表于 2006-03-13 14:25 |只看该作者
while( ( dest++ = sour++ ) != '\0' );

OReilly那本C语言,书中的作者不提昌写这种代码.
所以错在哪里也不知道.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-03-13 15:53 |只看该作者
原帖由 since19831023 于 2006-3-13 08:54 发表
StrCpy大写的因为我之前用了自己写的StrCpy函数,

我这里使用函数的时候是溢出了,篡改了堆栈存储区的内容,但我好不理解的就是,strarr[ 5 ]可以正常运行,strarr[ 4 ] 却不可以。为什么?!

溢出了不一定程序会运行出错,
这次运行不出错不一定下一次运行也不出错。

论坛徽章:
0
9 [报告]
发表于 2006-03-13 17:24 |只看该作者
原帖由 lenovo 于 2006-3-13 15:53 发表

溢出了不一定程序会运行出错,
这次运行不出错不一定下一次运行也不出错。


9494,溢出94溢出,有什么可讨论的,已经错了,再讨论为什么错的不一样,意义不大吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP