‘scanf‘: This function or variable may be unsafe. /unsigned和unsigned long

1.'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.(此函数或变量可能不安全。考虑使用scanf_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。)

        很经典的一个问题,上次学C的时候好像也遇到过。错误是因为 Microsoft Visual Studio 编译器(MSVC)将传统 C 库函数如 scanf 标记为不安全,并建议使用更安全的版本 scanf_s。这是微软特有的警告,目的是防止缓冲区溢出等安全问题。下面是我搜集到的2个解决方法。

方法 1:使用 scanf_s(仅限 Windows/MSVC)

#include <stdio.h>
int main(void) {
    int dogs;
    printf("How many dogs do you have?\n");
    scanf_s("%d", &dogs)
    printf("So you have %d dogs\n", dogs);
    return 0;
}

缺点:scanf_s 是微软扩展的函数,不是标准 C 函数,在其他编译器(如 GCC、Clang)中无法编译。

方法 2:禁用安全警告

#define _CRT_SECURE_NO_WARNINGS // 必须放在第一行!
#include <stdio.h>

int main(void) {
    // 原有代码
}

优点:兼容所有标准 C 编译器(如 GCC、Clang),适合跨平台学习。PS:CRT=C Runtime Library(C 运行时库)

或者可以点击VS的项目菜单栏—>属性—>C/C++—>预处理器—>预处理器定义中,点击编辑添加_CRT_SECURE_NO_WARNINGS 

2.unsigned和unsigned long为什么字节长度都是4

        unsigned实际上是unsigned int的缩写,它与unsigned long是两种不同数据类型,即使他们大的长度相同,但用这两个函数分别定义一个数,例如:

unsigned int a=10; 
unsigned long b=20; 
a=b;//这样写会报错

        实际上,它们俩的长度根据编译器/系统的不同,会发生变化

        我们可以使用代码输出他们的字节长度。结果都是4。

#include<stdio.h>
int main(void){
	printf("unsigned int 大小:%zu 字节\n", sizeof(unsigned int));
	printf("unsigned long 大小:%zu 字节\n", sizeof(unsigned long));
	return 0;}

        注意,这里的占位符用的是%zu,它是专门用于输出size_t类型的无符号整数,size_t 是标准库中表示“大小”的类型(如 sizeof 运算符的返回值)。%zu的大小取决于操作系统,在32位系统中是4字节,64位系统中是8字节。%d是用于输出int类型的参数,如果在此处使用,虽然可以正常运行,但是编译器会发出警告。

        其他的一些占位符后面我会整理下再发一篇。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值