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);
    
  • 相关阅读:
    hdu5360 Hiking(水题)
    hdu5348 MZL's endless loop(欧拉回路)
    hdu5351 MZL's Border(规律题,java)
    hdu5347 MZL's chemistry(打表)
    hdu5344 MZL's xor(水题)
    hdu5338 ZZX and Permutations(贪心、线段树)
    hdu 5325 Crazy Bobo (树形dp)
    hdu5323 Solve this interesting problem(爆搜)
    hdu5322 Hope(dp)
    Lightoj1009 Back to Underworld(带权并查集)
  • 原文地址:https://www.cnblogs.com/p123/p/10259396.html
Copyright © 2011-2022 走看看