项目场景:
博主在学习过程遇见几个头痛问题,因为当中涉及的几个知识点是还没接触,为了彻底搞懂每一条代码语句查阅很多资料才理解新知识点,并解决警告原因
因内容过多本篇文章主要介绍消除警告C6054:可能没有为字符串“name”添加字符串零终,消除警告C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”请移步:C6064
问题描述
// talkback.c -- 演示与用户交互
#include <stdio.h>
#include <string.h> // 提供strlen()函数的原型
#define DENSITY 62.4 // 人体密度(单位:磅/立方英尺)
int main()
{
float weight, volume;
int size, letters;
char name[40] ; // name是一个可容纳40个字符的数组
printf("Hi! What's your first name?\n");
scanf_s("%s", name, 40);
printf("%s, what's your weight in pounds?\n", name);
scanf_s("%f", &weight);
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;
}
上面是代码,大家可以复制尝试,当我开始调试的时候,出现如下警告
原因分析:
警告C6054:可能没有为字符串“name”添加字符串零终警告C6054:可能没有为字符串“name”添加字符串零终警告
我查了关于函数strlen相关内容,C语言 strlen ()函数用来求字符串的长度(包含多少个字符)。strlen() 函数从字符串的开头位置依次向后计数,直到遇见
\0
,然后返回计时器的值。最终统计的字符串长度不包括\0
。可能大伙会不理解\0又是啥东西,下面我解释:
就是strlen()计算字符串长度,但是我们编写的代码都是由字符组成,那他怎么知道字符串结尾在哪里呢,所以就用到ASCLL码第0号(其实就是0)作为结尾
警告C6054是不会影响程序进行,但这是不安全的,但如果如果想消除警告方法如下
解决方案:
因为我指定strlen()函数计算的的是变量数组是字符串name,本篇提供方法有两个
方法一:将声明变量时将字符串name初始化定义为0,所以在定义字符串name后面直接加上结束结束符0, //char name[40] = {0};
方法二:是在中间加字符串结束符'\0',“中间”是有一个范围,博主在网上没有找到这个范围的相关内容,但每个位置我都尝试了一遍,这个范围是从开始声明字符串变量----到使用strlen()函数,//name[ 40 - 1 ] = 0;
具体操作如下图
到此,问题已经解决,欢迎在评论区交流