首页 > 编程语言 >C程序设计谭浩强例题分析 1.2

C程序设计谭浩强例题分析 1.2

时间:2024-06-06 21:00:55浏览次数:16  
标签:1.2 int scanf 安全 谭浩强 sum 缓冲区 例题 代码

【例1.2】求两个整数之和。

【例1.2】求两个整数之和。
解题思路:设置3个变量,a和b用来存放两个整数,sum用来存放和数。用赋值运算符“=”把相加的结果传送给sum。

这里只列举了一种代码实现如果要看其他代码实现可以到我的:

GitHub:三种代码风格

我的答案:

#include<stdio.h>
int main() {
	int a = 0, b = 0, sum = 0;
	scanf_s("%d %d", &a, &b);
	sum = a + b;
	printf("%d", sum);
	return 0;
}

 正确答案:

#include<stdio.h>
int main()
{
    int a, b, sum;
    a = 123;
    b = 456;
    sum = a + b;
    printf("sum is %d\n", sum);
    return 0;
}

五、实现过程遇到的问题:

问题1:出现了问题首先在dec C中可以用scanf但是在vs2022中scanf识别为不安全

解决的办法:


1.头文件输入#pragma warning(disable:4996)


2.右击工程中源代码(main.c)处,打开属性栏>配置属性>C/C++>所有选项,将SDL检查改为否,保存

3.把scanf改成scanf_s

七、疑问

为什么vs2022不行但是devc++可以?

Visual Studio 2022 提供了很多安全功能和警告,以帮助开发人员编写更加安全和健壮的代码。以下是为什么 Visual Studio 2022 要将 scanf 等函数标记为不安全,并推荐使用安全版本的原因:

1. 缓冲区溢出风险

scanf 等函数在处理用户输入时没有对输入的长度进行严格检查,这可能会导致缓冲区溢出(Buffer Overflow)。缓冲区溢出是指数据超过了分配的存储空间,覆盖了相邻内存区域。这种漏洞可能被恶意用户利用来执行任意代码,导致安全问题。

2. 增强代码的安全性

为了提高代码的安全性,Microsoft 提出了很多更安全的函数,例如 scanf_sfgets_s 等,这些函数需要指定输入缓冲区的大小,从而防止缓冲区溢出。

3. 代码可维护性

安全版本的函数通过明确指定缓冲区大小,增强了代码的可读性和可维护性,使得其他开发人员更容易理解代码的意图和限制。

4. 编码规范和最佳实践

现代开发工具和编程规范都建议使用更安全的编码实践。通过引入这些警告和建议,Visual Studio 2022 帮助开发人员遵循这些最佳实践,写出更安全、可靠的代码。

具体示例说明

不安全的 scanf

scanf 不检查输入的长度,如果用户输入的数字过多,可能会导致内存溢出。

int main() {
    int a = 0, b = 0;
    scanf("%d %d", &a, &b); // 不安全
    return 0;
}
安全的 scanf_s

scanf_s 需要提供额外的参数来指定输入缓冲区的大小,从而防止缓冲区溢出。

int main() {
    int a = 0, b = 0;
    scanf_s("%d %d", &a, &b); // 安全
    return 0;
}

为什么要使用安全版本的函数?

  1. 防止缓冲区溢出:通过指定输入缓冲区的大小,可以有效防止缓冲区溢出,避免潜在的安全漏洞。
  2. 提高代码的健壮性:安全版本的函数可以更好地处理异常情况,使得代码更加健壮。
  3. 遵循最佳实践:使用安全版本的函数是现代编程的最佳实践,能够提高代码质量和可维护性。

总之,Visual Studio 2022 提供这些安全功能和警告,目的是帮助开发人员编写更加安全和健壮的代码,避免常见的安全漏洞,提高软件质量。

八、总结

1.学到了什么?

学到了代码风格1中的两种代码风格一种是加前缀一种是改函数提供了两条思路。

1.第一种和第三种都选择成我的代码风格方法2有溢出风险就算了

标签:1.2,int,scanf,安全,谭浩强,sum,缓冲区,例题,代码
From: https://blog.csdn.net/tang7mj/article/details/139509570

相关文章

  • Hive3.1.2概述与基本操作
    、Hive基本概念1.1 Hive简介Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce客户端。为什么使用Hive?如果直接使用hadoop的话,人员学习成本太高,项目要......
  • Hive3.1.2分区与排序(内置函数)
    1、Hive分区(十分重要!!)分区的目的:避免全表扫描,加快查询速度!在大数据中,最常见的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天或者每小时切分......
  • 疯狂的麦克斯:狂暴女神迅雷BT下载[百度云AVI/1.26G]高清版[HD720p国语中字
    《疯狂的麦克斯:狂暴女神》是由乔治·米勒执导,汤姆·哈迪和查理兹·塞隆主演。这部电影是《疯狂的麦克斯》系列的第四部作品,取材于1980年代的系列电影,以麦克斯和女战士伊梅拉的故事为主线,将观众带入一个被暴力和毁灭统治的废土世界。 影片以一个后末日时代的世界为背景......
  • 报错 urllib3 (1.26.7) or chardet (5.2.0)/charset_normalizer (2.0.8) doesn‘t mat
    报错RequestsDependencyWarning:urllib3(1.26.7)orchardet(5.2.0)/charset_normalizer(2.0.8)doesn'tmatchasupportedversion!warnings.warn("urllib3({})orchardet({})/charset_normalizer({})doesn'tmatchasupported"这个警告信息Req......
  • hive-3.1.2分布式搭建
    hive-3.1.2分布式搭建文档谷歌浏览器下载网址:GoogleChrome–Downloadthefast,securebrowserfromGoogle华为云镜像站:https://mirrors.huaweicloud.com/home1、上传解压配置环境变量#1、解压tar-zxvfapache-hive-3.1.2-bin.tar.gz-C/usr/local/s......
  • AnolisOS7.9(CentOS7)部署K8s(1.22.4)集群
    一.安装K8s集群1.准备工作,2台服务器①192.168.5.140-做为master节点#在该节点运行命令设置主机名:hostnamectlset-hostnamemaster②192.168.5.141-做为node1节点,在该节点运行命令设置主机名:#在该节点运行命令设置主机名:hostnamectlset-hostna......
  • 在CentOS 7.9上安装Nginx 1.24.0的步骤
    下载Nginxwgethttps://nginx.org/download/nginx-1.24.0.tar.gztar-xzfnginx-1.24.0.tar.gzcdnginx-1.24.0配置编译参数./configure--prefix=/usr/local/nginx编译和安装makesudomakeinstall创建Nginx服务文件sudovi/etc/systemd/system/nginx.service[U......
  • 【数据结构与算法 经典例题】链表的回文结构(图文详解)
                  ......
  • 【每周例题】 C++ 力扣 优势洗牌
    优势洗牌题目优势洗牌 题目分析1.采用双指针方法进行匹配2.依照题目所说,采用索引,首先需要填充索引,然后对索引进行升序排序。2.使用双指针进行匹配如果nums1[idx1[i]](即当前nums1中的元素)大于nums2[idx2[left]](即nums2中的当前最小元素),则将nums1[idx1[i]]赋值给ans[idx2[......
  • 【每周例题】C++ 力扣 旋转字符串
    旋转字符串 题目旋转字符串 题目分析方法1:模拟字符串1.采用双for循环去模拟字符串旋转,第一个for循环,模拟字符串循环位移;第二个for循环,进行逐个字符串检测2.使用if进行判断是否符合要求方法2:假设我们将goal字符串拆分为2个字符串,将其命名为R、L,我们将会得到以下式子go......