首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教一道C语言面试题 [已结贴,结贴人:weiya421]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • weiya421
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-21 15:24:43 楼主
    一道找错题,请大家帮助看看有什么错误,谢谢.

    char* p = "0123456789";
    char str[10];

    strcpy(str, p);


    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clhposs
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:25:271楼 得分:2
    char str[10]; 要11 因为有个'\0'
    char str[11];
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ttkk_2007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:26:362楼 得分:2
    很明显,char str[10];这句错了
    因该是char str[11];
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • stormlk1983
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:28:283楼 得分:2
    明显的你那个str的buffer定义的长度小了,至少定义成11啊,因为是字符串有‘\0’的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dede22
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:29:564楼 得分:2
    这个在于strcpy这个函数,他会在str的末尾自动的添加一个"\0",来表示这个字符串的结束。如果说有错误,那也就这个了。越界访问。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lbh2001
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:34:075楼 得分:10
    char* p = "0123456789"; //------>10+1=11个字符,编译器会加一个'\0'作为字符串的结尾
    char str[10];//----->只有十个位置,故造成栈溢出,会覆盖不属于自身的区域
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • caohaiming
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:36:366楼 得分:0
    引用 5 楼 lbh2001 的回复:
    char* p = "0123456789"; //------>10+1=11个字符,编译器会加一个'\0'作为字符串的结尾
    char str[10];//----->只有十个位置,故造成栈溢出,会覆盖不属于自身的区域


    应该是这样的吧。楼主快点结贴吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • edwal
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:37:007楼 得分:0
    楼上各位分析的都对,就是长度的问题,字符串有一个结束符'\0'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lbh2001
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:45:098楼 得分:2
    char* p = "0123456789";
    char str[10];

    strncpy(str, p, 10); //这样在C89中是可以的,但str不能作为字符串使用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lunarfan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 16:08:209楼 得分:0
    \0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • weiya421
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 16:16:4610楼 得分:0
    谢谢以上发言的各位了,哈哈
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pengzhixi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 16:17:2711楼 得分:0
    c类型字符串以'\0'结束。所以应该是char str[11]
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved