首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 华为的测试题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqs988
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-20 15:38:52 楼主
    五分钟内,找出下面程序中的三处错误, (非定义和语法错误)
    unsigned char * Test(void)
    {
        unsigned char i=0;
        int j=1000;
        char* p=NULL;
        for(i=0;i <j;i++)
        {
            strncpy(p,"hello",5);
        }
        return &i;
    }
    注意:不是定义和语法上的错误
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqs988
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:39:451楼 得分:0
        return &i; 这里是个错误吗?为什么?????
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyyapple
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:43:262楼 得分:0
    1. p没有分配空间
    2. i永远小于j,循环不会结束
    3. 返回局部变量地址
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lbh2001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:47:063楼 得分:0
    unsigned char * Test(void)
    {
        unsigned char i=0;
        int j=1000;
        char* p=NULL;
        for(i=0;i <j;i++) //----->无符号数与有符号数比较是会有麻烦的
        {
            strncpy(p,"hello",5); //----->p为指向有效地址
        }
        return &i; //------>能返回局部变量的地址,值是未定的
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • taojian_hhu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:47:234楼 得分:0
    1, p要分配空间
    2,for循环是死循环
    3, 返回了局部变量的地址

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • e_sharp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:46:265楼 得分:0
    引用 1 楼 hqs988 的回复:
        return &i; 这里是个错误吗?为什么?????


    p = Test(); //Test返回后,i被释放,p指向的内存中数据就未知了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ww2734
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:52:246楼 得分:0
    引用 3 楼 lbh2001 的回复:
    unsigned char * Test(void)
    {
        unsigned char i=0;
        int j=1000;
        char* p=NULL;
        for(i=0;i <j;i++) //----->无符号数与有符号数比较是会有麻烦的
        {
            strncpy(p,"hello",5); //----->p为指向有效地址
        }
        return &i; //------>能返回局部变量的地址,值是未定的
    }

    高手!我只找到前两个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhkefa
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:58:067楼 得分:0
    就那3个吧,,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • leitianjun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:59:278楼 得分:0
    C/C++ code
    unsigned char * Test(void) { unsigned char i=0; int j=1000; char* p=NULL; for(i=0;i <j;i++) //char类型的i和int类的j做比较;实际编译器不报错! { strncpy(p,"hello",5); //copy字符串溢出 } return &i; //返回了局部的变量地址 }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tfnadnt
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:00:509楼 得分:0
    引用 2 楼 yyyapple 的回复:
    1. p没有分配空间
    2. i永远小于j,循环不会结束
    3. 返回局部变量地址
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ysysbaobei
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:14:2210楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • changjiangcug
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:51:1111楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liweiwei0808
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:55:1512楼 得分:0
    还有,strncpy(p,"hello",5); 5太小了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yeliguo12345
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:14:0813楼 得分:0
    unsigned char * Test(void)
    {
        unsigned char i=0;
        int j=1000;
        char* p=NULL;
        for(i=0;i <j;i++) //i永远小于j
        {
            strncpy(p,"hello",5);//p指向哪里啊,而且"hello"是六个字符
        }
        return &i; //i局部变量,
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solaker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:59:0414楼 得分:0
    "hello"是六个字符
    return &i; 返回局部局部变量的地址,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aaajj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 20:16:1715楼 得分:0
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • realdragon2
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 20:33:4416楼 得分:0
    引用 2 楼 yyyapple 的回复:
    1. p没有分配空间
    2. i永远小于j,循环不会结束
    3. 返回局部变量地址
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • l51
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 20:37:1217楼 得分:0
    请仔细读strncpy的说明,长度是不会影响 strncpy 执行的,
    个人认为错误三处就是:
    p 为空指针不能使用strncpy填充;
    i 会在循环时溢出;
    函数返回函数内变量地址,此地址值不会出错,但是调用此此地的指向将会出错.

    附strncpy的MSDN英文说明
    The strncpy function copies the initial count characters of strSource to strDest and returns strDest. If count is less than or equal to the length of strSource, a null character is not appended automatically to the copied string. If count is greater than the length of strSource, the destination string is padded with null characters up to length count. The behavior of strncpy is undefined if the source and destination strings overlap.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • apollofsc2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 21:57:5018楼 得分:0
    大家都指出了错误,
    请问该如何修改呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • apollofsc2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 21:57:5219楼 得分:0
    大家都指出了错误,
    请问该如何修改呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CSYNYK
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 00:04:5220楼 得分:0
    修改如下:(不管函数的具体作用,指针对每条语句修改)
    C/C++ code
    unsigned char * Test(void) { int i=0; int j=1000; char* p=(char *)malloc(6); for(i=0;i <j;i++) { strncpy(p,"hello",5); *(p+5)='\0'; } return (unsigned char *)p; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hxqing99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 00:14:4721楼 得分:0
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yyyapple
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 08:27:0122楼 得分:0
    引用 19 楼 apollofsc2008 的回复:
    大家都指出了错误,
    请问该如何修改呢



    C/C++ code
    #include <stdio.h> #include <stdlib.h> #include <string.h> unsigned char * Test(void) { int i=0; int j=1000; char* p=(char *)calloc(6,1); if( 0 == p) { free(p); return 0; } for(i=0;i <j;i++) { strncpy(p,"hello",5); printf("%s\n", p); } return (unsigned char *)p; } int main() { unsigned char* pp=Test(); if(pp!=0) free(pp); system("pause"); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • skey006
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 08:48:4423楼 得分:0
    说的都很对啊,顶了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yumei20001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 09:06:3224楼 得分:0
    大家都这么厉害,工作应该不难找
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • King2005
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:01:2225楼 得分:0
    厉害啊!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiao7cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:15:2126楼 得分:0
    都是很基本的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lunarfan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:15:5927楼 得分:0
    这些bug都很隐晦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqs988
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 17:25:4628楼 得分:0
    若p分配了6个字节,可以直接用下面的拷贝
    strncpy(p,"hello",6);5直接可以改成6.

    不需要:*(p+5)='\0';


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wjming8352
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 19:17:1029楼 得分:0
    看来我还需要努力啊!
    修改