免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yyjjss
打印 上一主题 下一主题

今天去华为面试,遇到了一个题,大家看看 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-08-13 14:52 |只看该作者
原帖由 cocoa1227 于 2007-8-13 14:48 发表


在AIX5下跑出来是这个结果
str1=123456789
str2=9

能把汇编贴出来看看吗?

论坛徽章:
0
22 [报告]
发表于 2007-08-13 14:52 |只看该作者
呃 winXP 下面是错了的 mingw 3.42

论坛徽章:
0
23 [报告]
发表于 2007-08-13 15:08 |只看该作者
且不说这个混蛋程序的对错,问题是你怎么还敢去华为??听说华为的楼道里冤魂乱串啊!

论坛徽章:
0
24 [报告]
发表于 2007-08-13 15:09 |只看该作者
1.c
int main(void)
{
        char * str1 = "6789";
        char * str2 = "123456789";
        strcpy(str1, str2);
        return 0;
}
winxp gcc 3.4.2
gcc -S 1.c

1.s:
        .file        "1.c"
        .def        ___main;        .scl        2;        .type        32;        .endef
        .section .rdata,"dr"
LC0:
        .ascii "6789\0"
LC1:
        .ascii "123456789\0"
        .text
.globl _main
        .def        _main;        .scl        2;        .type        32;        .endef
_main:
        pushl        %ebp
        movl        %esp, %ebp
        subl        $24, %esp
        andl        $-16, %esp
        movl        $0, %eax
        addl        $15, %eax
        addl        $15, %eax
        shrl        $4, %eax
        sall        $4, %eax
        movl        %eax, -12(%ebp)
        movl        -12(%ebp), %eax
        call        __alloca
        call        ___main
        movl        $LC0, -4(%ebp)
        movl        $LC1, -8(%ebp)
        movl        -8(%ebp), %eax
        movl        %eax, 4(%esp)
        movl        -4(%ebp), %eax
        movl        %eax, (%esp)
        call        _strcpy
        movl        $0, %eax
        leave
        ret
        .def        _strcpy;        .scl        3;        .type        32;        .endef
运行报错0x00403000无法written
str1指向了一个被分配到rodata段的地址, str2也是, 当strcpy(str1, str2)时, 往str1指向的地址写入就会报错,str1指向的是只读区域。

论坛徽章:
0
25 [报告]
发表于 2007-08-13 15:09 |只看该作者
C语言华为标准

论坛徽章:
0
26 [报告]
发表于 2007-08-13 15:13 |只看该作者
原型:extern char *strcpy(char *dest,char *src);
        
  用法:#include <string.h>
  
  功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
  
  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
        返回指向dest的指针。

这个程序违反了src和dest所指内存区域不可以重叠吗?

论坛徽章:
0
27 [报告]
发表于 2007-08-13 15:16 |只看该作者
华为的题就是这种类型,我做过。
跟那个什么高纸量C++有点像

论坛徽章:
0
28 [报告]
发表于 2007-08-13 15:20 |只看该作者
且不说这个混蛋程序的对错,问题是你怎么还敢去华为??听说华为的楼道里冤魂乱串啊!

=================
进去就看见床垫和被子,已经凉了半截

论坛徽章:
0
29 [报告]
发表于 2007-08-13 15:26 |只看该作者
原帖由 JohnBull 于 2007-8-13 15:08 发表
且不说这个混蛋程序的对错,问题是你怎么还敢去华为??听说华为的楼道里冤魂乱串啊!




论坛徽章:
0
30 [报告]
发表于 2007-08-13 15:29 |只看该作者
str1是否存在.rodata段跟编译器和系统有关么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP