C语言面试题精选:指针、进程、运算、结构体、函数、内存
需积分: 0 41 浏览量
更新于2024-09-13
2
收藏 50KB DOC 举报
"C语言面试题详解"
在C语言面试中,了解基本概念和常见问题是非常重要的。本文将对12个C语言面试题进行详解,涵盖指针、进程、运算、结构体、函数、内存等方面。
**问题1:gets()函数**
问题代码:
```c
#include<stdio.h>
int main(void)
{
char buff[10];
memset(buff,0,sizeof(buff));
gets(buff);
printf("\n The buffer entered is [%s]\n",buff);
return 0;
}
```
问题描述:请找出上面代码里的问题。
答案:上面代码里的问题在于函数gets()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。这里推荐使用标准函数fgets()代替。
gets()函数是一种危险的函数,因为它会将输入的字符串复制到缓存中,而不检查缓存的容积,这可能会导致缓存溢出。如果输入的字符串长度超过缓存的容积,gets()函数将继续复制字符串,直到遇到一个换行符或文件结束符,从而导致缓存溢出。
**问题2:strcpy()函数**
问题代码:
```c
#include<stdio.h>
int main(int argc,char* argv[])
{
int flag=0;
char passwd[10];
memset(passwd,0,sizeof(passwd));
strcpy(passwd,argv[1]);
if(0==strcmp("LinuxGeek",passwd))
{
flag=1;
}
if(flag)
{
printf("\nPassword cracked\n");
}
else
{
printf("\nIncorrect passwd\n");
}
return 0;
}
```
问题描述:你能在不知道密码的情况下将其破解吗?
答案:破解上述加密的关键在于利用攻破strcpy()函数的漏洞。所以用户在向“passwd”缓存输入随机密码的时候并没有提前检查“passwd”的容量是否足够。所以,如果用户输入一个足够造成缓存溢出并且重写“flag”变量默认值所存在位置的内存的长“密码”,即使这个密码无法通过验证,flag验证位也变成了非零,也就可以获得被保护的数据了。
strcpy()函数也是一个危险的函数,因为它会将源字符串复制到目标缓存中,而不检查目标缓存的容积,这可能会导致缓存溢出。如果源字符串长度超过目标缓存的容积,strcpy()函数将继续复制字符串,直到遇到一个空字符,从而导致缓存溢出。
在C语言编程中,使用gets()和strcpy()函数需要非常小心,因为它们可能会导致缓存溢出和安全漏洞。因此,在编写C语言程序时,需要使用 fgets()和strncpy()函数代替gets()和strcpy()函数,以避免缓存溢出和安全漏洞。
508 浏览量
2024-03-29 上传
2012-11-17 上传
2012-11-02 上传
2022-06-12 上传
2010-06-28 上传
2010-12-29 上传
2023-11-13 上传
a_b_c__d
- 粉丝: 0
- 资源: 1
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍