C语言面试题及答案

C语言面试题及答案

ID:45886178

大小:191.74 KB

页数:11页

时间:2019-11-19

C语言面试题及答案_第1页
C语言面试题及答案_第2页
C语言面试题及答案_第3页
C语言面试题及答案_第4页
C语言面试题及答案_第5页
资源描述:

《C语言面试题及答案》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C语言面试题及答案    1.gets()函数    问:请找出下面代码里的问题:    include    intmain(void)    {    charbuff[10];    memset(buff,0,sizeof(buff));    gets(buff);    printf(Thebufferenteredis[%s],buff);    return0;    }    答:上面代码里的问题在于函数gets()的使用这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积这可能会导致缓存溢出这里推荐使用标准函数fgets()代替    2.str

2、cpy()函数    问:下面是一个简单的密码保护功能你能在不知道密码的情况下将其破解?    include    intmain(intargc,char*argv[])    {    intflag=0;    charpasswd[10];    memset(passwd,0,sizeof(passwd));    strcpy(passwd,argv[1]);    if(0==strcmp(LinuxGeek,passwd))    {    flag=1;    }    if(flag)    {    printf(Passwordcracked);  

3、  }    else    {    printf(Incorrectpasswd);    }    return0;    }    答:破解上述加密的关键在于利用攻破strcpy()函数的漏洞所以用户在向“passwd”缓存输入随机密码的时候并没有提前检查“passwd”的容量是否足够所以如果用户输入一个足够造成缓存溢出并且重写“flag”变量默认值所存在位置的内存的长“密码”即使这个密码无法通过验证flag验证位也变成了非零也就可以获得被保护的数据了例如:    $./psswdaaaaaaaaaaaaa    Passwordcracked    虽然上面的密码并

4、不正确但我们仍然可以通过缓存溢出绕开密码安全保护    要避免这样的问题建议使用strncpy()函数    作者注:最近的编译器会在内部检测栈溢出的可能所以这样往栈里存储变量很难出现栈溢出在我的gcc里默认就是这样所以我不得不使用编译命令‘fnostackprotector’来实现上述方案    3.main()的返回类型    问:下面的代码能编译通过?如果能它有什么潜在的问题?    include    voidmain(void)    {    char*ptr=(char*)malloc(10);    if(NULL==ptr)    {    printf(Ma

5、llocfailed);    return;    }    else    {    //Dosomeprocessing    free(ptr);    }    return;    }    答:因为main()方法的返回类型这段代码的错误在大多数编译器里会被当作警告main()的返回类型应该是“int”而不是“void”因为“int”返回类型会让程序返回状态值这点非常重要特别当程序是作为依赖于程序成功运行的脚本的一部分运行时    4.内存泄露    问:下面的代码会导致内存泄漏?    include    voidmain(void)    {    char*

6、ptr=(char*)malloc(10);    if(NULL==ptr)    {    printf(Mallocfailed);    return;    }    else    {    //Dosomeprocessing    }    return;    }    答:尽管上面的代码并没有释放分配给“ptr”的内存但并不会在程序退出后导致内存泄漏在程序结束后所有这个程序分配的内存都会自动被处理掉但如果上面的代码处于一个“while循环”中那将会导致严重的内存泄漏问题    提示:如果你想知道更多关于内存泄漏的知识和内存泄漏检测工具可以来看看我们在Val

7、grind上的文章    5.free()函数    问:下面的程序会在用户输入’freeze’的时候出问题而’zebra’则不会为什么?    include    intmain(intargc,char*argv[])    {    char*ptr=(char*)malloc(10);    if(NULL==ptr)    {    printf(Mallocfailed);    return1;    }    elseif(arg

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。