有趣的C语言面试题带答案.doc

有趣的C语言面试题带答案.doc

ID:56980168

大小:35.00 KB

页数:7页

时间:2020-07-30

有趣的C语言面试题带答案.doc_第1页
有趣的C语言面试题带答案.doc_第2页
有趣的C语言面试题带答案.doc_第3页
有趣的C语言面试题带答案.doc_第4页
有趣的C语言面试题带答案.doc_第5页
资源描述:

《有趣的C语言面试题带答案.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.gets()函数问:请找出下面代码里的问题:1.#include 2.int main(void) 3.{ 4.    char buff[10]; 5.    memset(buff,0,sizeof(buff)); 6. 7.    gets(buff); 8. 9.    printf(" The buffer entered is [%s]",buff); 10. 11.    return 0; 12.} 答:上面代码里的问题在于函数gets()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。这里推荐使

2、用标准函数fgets()代替。2.strcpy()函数问:下面是一个简单的密码保护功能,你能在不知道密码的情况下将其破解吗?1.#include 2. 3.int main(int argc, char *argv[]) 4.{ 5.    int flag = 0; 6.    char passwd[10]; 7. 8.    memset(passwd,0,sizeof(passwd)); 9. 10.    strcpy(passwd, argv[1]); 11. 12.    if(0 == strcmp("LinuxGeek", passwd)) 13.  

3、  { 14.        flag = 1; 15.    } 16. 17.    if(flag) 18.    { 19.        printf(" Password cracked "); 20.    } 21.    else 22.    { 23.        printf(" Incorrect passwd "); 24. 25.    } 26.    return 0; 1.} 答:破解上述加密的关键在于利用攻破strcpy()函数的漏洞。所以用户在向“passwd”缓存输入随机密码的时候并没有提前检查“passwd”的容量是否足够。所

4、以,如果用户输入一个足够造成缓存溢出并且重写“flag”变量默认值所存在位置的内存的长“密码”,即使这个密码无法通过验证,flag验证位也变成了非零,也就可以获得被保护的数据了。例如:1.$ ./psswd aaaaaaaaaaaaa 2. 3.Password cracked 虽然上面的密码并不正确,但我们仍然可以通过缓存溢出绕开密码安全保护。要避免这样的问题,建议使用strncpy()函数。作者注:最近的编译器会在内部检测栈溢出的可能,所以这样往栈里存储变量很难出现栈溢出。在我的gcc里默认就是这样,所以我不得不使用编译命令‘-fno-stack-protector’来实现上述方案。

5、3.main()的返回类型问:下面的代码能编译通过吗?如果能,它有什么潜在的问题吗?1.#include 2. 3.void main(void) 4.{ 5.    char *ptr = (char*)malloc(10); 6. 7.    if(NULL == ptr) 8.    { 9.        printf(" Malloc failed "); 10.        return; 11.    } 12.    else 13.    { 14.        // Do some processing 15.        free(p

6、tr); 16.    } 17. 18.    return; 19.} 答:因为main()方法的返回类型,这段代码的错误在大多数编译器里会被当作警告。main()的返回类型应该是“int”而不是“void”。因为“int”返回类型会让程序返回状态值。这点非常重要,特别当程序是作为依赖于程序成功运行的脚本的一部分运行时。4.内存泄露问:下面的代码会导致内存泄漏吗?1.#include 2. 3.void main(void) 4.{ 5.    char *ptr = (char*)malloc(10); 1. 2.    if(NULL == ptr) 3.   

7、 { 4.        printf(" Malloc failed "); 5.        return; 6.    } 7.    else 8.    { 9.        // Do some processing 10.    } 11. 12.    return; 13.} 答:尽管上面的代码并没有释放分配给“ptr”的内存,但并不会在程序退出后导致内存泄漏。在程序结束后,所有这个程序分配的内存都会自

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

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

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