在visual C++6.0中执行成功,在vs2022中调试执行一半无法继续

在visual C++6.0中执行成功,在vs2022中调试执行一半无法继续
//第19个程序--演示与用户交互--P175页
#include 
#include        //提供strlen()函数的原型
#define DENSITY 62.4    //    人体密度(单位:磅/立方英尺

int main(void)
{
    float weight, volume;
    int size, letters;
    char name[40];        //name是一个可容纳40个字符的数组
    printf("Hi!What's your first name?\n");
    scanf("%s", name);          //vs2022中“scanf”必须改写成“scanf_s”才能够执行,这也是我的疑问之一,求解答
    printf("%s,what's your weight in pounds?\n", name);
    scanf("%f", &weight);        ////vs2022中“scanf”必须改写成“scanf_s”才能够执行,这也是我的疑问之一,求解答
    size = sizeof name;
    letters = strlen(name);
    volume = weight / DENSITY;
    printf("Well,%s,your volume is %2.2f cubic feet.\n",
        name, volume);
    printf("Also,your first name has %d letters,\n",
        letters);
    printf("and we have %d bytes to store it.\n", size);
    return 0;
}

visual C++6.0环境执行结果正确:

img

vs2022环境执行到一半显示:未处理的异常

img

img

img

https://ask.csdn.net/questions/7764708?spm=1001.2014.3001.5501已找到正确详细解决方案。

是这样的,VS是微软公司的,微软公司认为scanf是不安全的,所以设计了VS独有的scanf_s模块,在VS中,必须要用scanf_s才能运行。

此外还有一种方法可以使用scanf,就是把VS的安全检查关掉就行了。

scanf函数在读取键盘字符时不检查边界,可能会造成溢出现象,scanf_s则需提供一个读取多少位字符的变量,以防止溢出,是一个相对安全的函数。请给scanf一个结束符,如\n

scanf("%s", name);
改为
scanf_s("%s", name,40);
试试

供参考:

//第19个程序--演示与用户交互--P175页
#include <stdio.h>
#include <string.h>
#define DENSITY 62.4    //    人体密度(单位:磅/立方英尺

int main(void)
{
    float weight, volume;
    int size, letters;
    char name[40];        //name是一个可容纳40个字符的数组
    printf("Hi!What's your first name?\n");
    //scanf("%s", name);   //vs2022中“scanf”必须改写成“scanf_s”才能够执行,这也是我的疑问之一,求解答
    scanf_s("%s", name, 40);
    printf("%s,what's your weight in pounds?\n", name);
    //scanf("%f", &weight);  //vs2022中“scanf”必须改写成“scanf_s”才能够执行,这也是我的疑问之一,求解答
    scanf_s("%f", &weight);
    size = sizeof (name); //size = sizeof name;
    letters = strlen(name);
    volume = weight / DENSITY;
    printf("Well,%s,your volume is %2.2f cubic feet.\n",name, volume);
    printf("Also,your first name has %d letters,\n",letters);
    printf("and we have %d bytes to store it.\n", size);
    return 0;
}