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

【例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有溢出风险就算了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值