zoukankan      html  css  js  c++  java
  • VS部分安全函数用法

    在 VS(Visual Studio)下编译C语言程序,有时候VS会报错,提示用到的一些函数可能不安全,并且建议替换为带有_s后缀的安全函数。

    安全函数是什么

    scanf()、gets()、fgets()、strcpy()、strcat() 等都是C语言自带的函数,它们都是标准函数,但是它们都有一个缺陷,就是不安全,可能会导致数组溢出或者缓冲区溢出,让黑客有可乘之机,从而发起“缓冲区溢出”攻击。scanf_s()、gets_s()、fgets_s()、strcpy_s()、strcat_s() 等是微软自己发明的安全函数,它们仅适用于 VS,在其它编译器下无效。这些安全函数在读取或操作字符串时要求指明长度,这样一来,过多的字符就会被过滤掉,避免了数组或者缓冲区溢出。

    最简单粗暴的方法,关掉它

    安全函数是微软自己发明的,只适用于 VS 编译器,在其他编译器下无效,感觉不利于我们学习。
    关掉SDL检查或者在程序开头(就是在#include <stdio.h>之类的前面)加上下面2条命令中的一个都可以关闭安全函数

    #define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    

    部分安全函数用法

    scanf_s()

    下面2种用法都可以

    scanf_s("%d", &a);
    scanf_s("%s", str, n);//最多只允许读取 n-1 个字符(因为最后一个要存储’’)
    

    fopen_s()

    FILE *fp;
    errno_t err;
    err= fopen_s(&fp, "1.txt", "r");
    

    strcat_s()

    char str1="abcd";
    char str2="efgh";
    char *ret=(char *)malloc(120);
    memset(ret, 0, sizeof(ret));//初始化字符串
    int len1=strlen(str1)+1;
    strcat_s(ret, len1, str1);//第2个参数是合并字符串后的字符数量,即源串大小+目标串大小+字符串结束符大小("")
    int len2=strlen(ret)+strlen(str2)+1;       
    strcat_s(ret, len2, str2);
    printf("%s", ret);
    
  • 相关阅读:
    谈谈Nullable<T>的类型转换问题
    MiniProfiler使用方法
    捕获变量
    web服务相关的问题或技巧
    对接mysql数据库遇见的一些问题
    委托
    导出到Excel
    斐波那契数列的运算时间
    .net framework摘抄与理解
    sql 语句
  • 原文地址:https://www.cnblogs.com/p123/p/10259396.html
Copyright © 2011-2022 走看看