最详细的关于C6054:可能没有为字符串“name”添加字符串零终警告和C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

项目场景:

博主在学习过程遇见几个头痛问题,因为当中涉及的几个知识点是还没接触,为了彻底搞懂每一条代码语句查阅很多资料才理解新知识点,并解决警告原因

因内容过多本篇文章主要介绍消除警告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;

具体操作如下图

 

 到此,问题已经解决,欢迎在评论区交流

  • 39
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值