//第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;
}
https://ask.csdn.net/questions/7764708?spm=1001.2014.3001.5501已找到正确详细解决方案。
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;
}