zoukankan      html  css  js  c++  java
  • gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性

    首先,这些C函数,在VS上要加_s后缀的原因是,这些函数存在字符串越界等问题,可以参考这篇文章,https://blog.csdn.net/silleyj/article/details/8545408

    个人猜测:由于这些C函数存在这些问题,所以VS编译器直接屏蔽了这些函数,然后用了一套加上后缀_s的函数来实现相同的功能,为了解决之前函数的越界的问题,_s系列的函数又分别增加了一些形参,比如长度等,所以,即使我们在C语言函数的基础上加上_s,还是会出现参数太少或形参类型和实参类型不匹配的问题。查看_s函数的形参列表的方式是:将光标移到你要查询的函数名里,然后单击右键,选择查看定义(或者使用快捷键 Alt + F12),然后就可以看到新版本的安全的C函数的形参列表了,根据这个形参列表设置实参就可以了

    比如:

      gets_s()函数的查询结果:,可以看出,这个函数需要两个参数,一个是字符串的首地址,另一个是字符串的最大长度

     strcpy_s()函数的查询结果:,可以看出,这个函数需要传递三个参数,分别是目的字符串首地址, 目的地址的大小, 原字符串的首地址

      scanf_s的查询结果是:这个查询不出来,可以参考这篇文章:https://blog.csdn.net/silleyj/article/details/8545408, 输入字符串还要传递一个大小,如:scanf_s("%s", s, 20);

      gets(s)函数可以读取输入的字符序列里的空格,作用相当于getline(cin, s);

      scanf("%s", s),只能空格前面的字符串,即认为遇到空格则停止读取,作用相当于cin >> s;

    栈的随机性:

     1 //#include "SeqList.h"
     2 #include <stdio.h>
     3 #include <string.h>
     4 
     5 static int c = 2;
     6 int b = 0;
     7 int main()
     8 {
     9     
    10     int a = 1;
    11     const int d = 0;
    12     printf("%p
    ", &a);    //栈的随机性,使得a所在的栈段的位置在不断变化,所以a的地址每次执行这个文件a的地址都会变化
    13     printf("%p
    ", &c);
    14     printf("%p
    ", &b);
    15     printf("%p
    ", &d);
    16     return 0;
    17 }

     有关内存分区可以参考这篇文章:https://www.cnblogs.com/bakari/archive/2012/08/05/2623637.html

  • 相关阅读:
    element-ui-——el-uploadexcel导入
    正则表达式
    vue调用兄弟组件的方法使用vueBus调用$emit、$on(只需触发方法即可,不需要考虑传值或参数的问题)
    vue用法父组件调用子组件方法--->$refs
    vue——父子传值
    响应式布局
    vue创建脚手架 cil
    Vue 循环为选中的li列表添加效果
    课后习题-14
    date 命令详解
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9721181.html
Copyright © 2011-2022 走看看