c语言常量变量

c语言常量变量

const 修饰常变量
#define定义标识符常量

   #define num 10  //这里不需要分号int a=num;

enum枚举常量

enum Color
{RED,GREEN,BLUE
};
int main(){enum Color c=RED;//枚举常量不允许修改
}
//定义常量
int a=10;
char b='a';

错误语法注意

//定义常变量
const int a=10;//本质是变量,有着常量的属性,常变量不允许修改
a=20;  //此时a修改会报错  报错提示是a为只读变量无法读取int a = 10;
int arr[a] = {0};//会给你提示数组中的个数a必须是定量不能是变量const int a = 10; //使用常变量定义数组个数  同样的错误跟提示语句
int arr[a] = {0};//会给你提示数组中的个数a必须是定量不能是变量

在这里插入图片描述
在这里插入图片描述

字符串变量char

  • 字符串定义的两种方式
    • 使用大括号包含字符的形式,注意字符用单引号标识
    • 使用双引号里面直接输入字符串

特别注意第一种方式定义字符串的话后面不加\0那么最终会有乱码出现,乱码出现的原因是因为定义字符串使用%s读取的时候是从当前读取一直在内存中找到\0才结束

 char arr[] = {'a', 'b', 'c', 'd'};//这种属于字符数组不属于字符串char arr0[] = {'a', 'b', 'c', 'd','\0'};//正确写法char arr1[]="abcd";for (int i = 0; i < 4; i++){printf("%c", arr[i]);//a,b,c,d  ,由此表明此写法只能代表字符数组}printf("%s", a);//abcd乱码printf("%s", arr0);// abcdprintf("%s", arr1);  abcd

gets 安全性不高慎重使用

  • gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符(‘\n’)不属于这个字符串
  • 调用格式为:
    gets(str)
    其中str为字符串变量(字符串数组名或字符串指针)。
    gets(str) 函数与 scanf(“%s”, &str) 相似,但不完全相同,使用 scanf(“%s”, &str) 函数输入字符串时存在一个问题,就是如果输入了 空格 会认为输入字符串结束。空格后的字符将作为下一个输入项处理, 但 gets() 函数将接收输入的整个字符串直到 回车 为止。
    char arr[10];gets(arr);printf("%s", arr);

fgets

  • fgets()函数用来从 标准输入设备(键盘)读取字符串;
    调用格式为:
    fgets(str,n,stdin);

此处,stdin是文件指针 通常使用stdin代表是从键盘输入;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加’\0’,并以str作为函数值返回。

 	 char arr[10];fgets(arr, 4, stdin);//输入abcd结果是    abc+'\n'if(arr[strlen(arr) - 1] == '\n')  {      //在做字符串拼接的时候需要 去掉换行符arr[strlen(arr) - 1] = '\0'; }printf("%s", arr);

总结

scanf/gets/fgets三者的区别

  • scanf
    1.scanf是一个格式化输入函数,它可以根据指定的格式从标准输入读取数据。
    2.使用scanf读取字符串时,需要小心处理缓冲区溢出的问题,因为scanf不会自动检查目标缓冲区的大小。
    3.scanf在读取字符串时遇到空格、制表符或换行符会停止。
  • gets
    1.gets函数从标准输入读取一行,直到遇到换行符为止,并将换行符替换为字符串结束符\0。
    2.gets不检查目标缓冲区的大小,因此非常容易导致缓冲区溢出,引发安全问题。因此,在现代C语言编程中,gets函数已被弃用。
  • fgets
  1. fgets函数也从标准输入读取一行,直到遇到换行符或达到指定的最大字符数。
    2.fgets会将换行符一起读入字符串(如果需要可以手动去除),并在字符串末尾添加\0。
    3.fgets允许指定一个最大字符数,从而可以防止缓冲区溢出,更加安全。
char a[] = "ab";char b[] = "ab\0";   //'\0'转义字符算一个printf("%d", sizeof(a)); // 3 加上'\0'的长度printf("%d", strlen(a)); // 2  不加上'\0'的长度printf("%d", sizeof(b)); // 4  加上'\0'的长度 printf("%d", strlen(b)); // 2  不加上'\0'的长度char a[10] = "";scanf("%s", a); //abc  cddprintf("%d", strlen(a));//3printf("%s", a);//abc  遇空格结束gets(a);printf("%s", a);//abc  cdd 遇空格不会结束printf("%d", strlen(a));//7fgets(a,7, stdin); //如果第二个参数是n  那么输出字符就是n-1 因为算上了换行符printf("%s", a); //abc cdprintf("%d", strlen(a)); //6

sizeof(arr) 计算长度加上‘\0’
strlen(arr)计算不加上’\0’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547612.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

windows 桌面采集音频

头文件&#xff1a; #ifndef __CAPTURE_AUDIO__ #define __CAPTURE_AUDIO__#include <functional> #include <windows.h> #pragma comment(lib, "winmm.lib")class CaptureAudio { public:CaptureAudio();~CaptureAudio();public:bool Init(const std::…

JSON与CSV之间的主要区别

今天要和大家深入探讨一个数据处理中的常见问题——JSON与CSV之间的主要区别。这两种数据格式各有千秋&#xff0c;适用于不同的场景。让我们一起来了解它们的特点和应用。 一、数据结构的差异 首先&#xff0c;JSON是一种轻量级的数据交换格式&#xff0c;能够表示复杂的数据…

Unity开发绘画板——04.笔刷大小调节

笔刷大小调节 上面的代码中其实我们已经提供了笔刷大小的字段&#xff0c;即brushSize&#xff0c;现在只需要将该字段和界面中的Slider绑定即可&#xff0c;Slider值的范围我们设置为1~20 代码中只需要做如下改动&#xff1a; public Slider brushSizeSlider; //控制笔刷大…

深圳易图讯科技场区态势感知系统

一、功能与目标优化描述&#xff1a; .图像采集、传输、存储与管理系统&#xff1a; 实时采集&#xff1a;利用摄像头、移动摄像设备及微距摄像头&#xff0c;全面覆盖场区内固定点位和重要场地&#xff0c;实现视频图像的实时采集。 高效传输&#xff1a;通过有线、无线网…

秒懂Linux之信号

目录 信号的基本概念 信号的处理方式 默认动作 自定义处理信号 忽略该信号 信号的产生方式 kill命令 键盘组合键 系统调用 软件条件 异常 信号产生的深层理解 core的功能 信号的阻塞 内核中的表示 sigset_t 信号集操作函数 sigprocmask sigpending …

关于最小二乘法

最小二乘法的核心思想简单而优雅&#xff1a;我们希望找到一条最佳的曲线&#xff0c;使其尽可能贴近所有的数据点。想象一下&#xff0c;当你在画布上描绘一条线&#xff0c;目标是让这条线与点的距离最小。数学上&#xff0c;这可以表示为&#xff1a; 在这个公式中&#xff…

基于nodejs+vue的水产品销售管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

【Linux篇】网络编程——I/O复用

目录 一、初识复用 1. 认识复用 2. 复用的优点 3. 复用技术在服务端的应用 二、select 技术 1. 设置文件描述符&#xff08;fd_set&#xff09; 2. 文件描述符的控制 &#xff08;1&#xff09;FD_ZERO &#xff08;2&#xff09;FD_SET &#xff08;3&#xff09;FD…

前端使用 Konva 实现可视化设计器(23)- 绘制曲线、属性面板

本章分享一下如何使用 Konva 绘制基础图形&#xff1a;曲线&#xff0c;以及属性面板的基本实现思路&#xff0c;希望大家继续关注和支持哈&#xff08;多求 5 个 Stars 谢谢&#xff09;&#xff01; 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug&a…

SQL常用数据过滤 - EXISTS运算符

SQL查询中的EXISTS运算符用于检查查询子句是否存在满足特定条件的记录&#xff0c;如果有一条或者多条记录存在&#xff0c;则返回True&#xff0c;否则返回False。 语法结构 SELECT column_name(s)FROM table_nameWHERE EXISTS(SELECT column_name FROM table_name WHERE co…

C++实现二叉树的创建删除,dfslfs,求叶子结点个数,求叶子结点个数,求树的高度

C实现二叉树的创建删除&#xff0c;dfs/lfs,求叶子结点个数&#xff0c;求树的高度 基本算法&#xff1a; 用链栈建立二叉树&#xff0c;通过递归实现深度优先的三种遍历&#xff0c;用队列实现广度优先层次遍历。借助递归思想求解叶子结点个数和树的深度。 tree.h定义基本的…

TMR技术的发展及其应用技术的介绍

目录 概述 1 TMR传感器介绍 1.1 原理介绍 1.2 技术演进历史 2 TMR技术的应用 2.1 电阻特性 2.2 技术比较 2.3 磁道特性 3 多维科技的芯片&#xff08;TMR1202&#xff09; 3.1 芯片介绍 3.2 特性 ​3.3 典型应用 参考文献 概述 本文主要介绍TMR技术的发展及其技术…

PyTorch构建卷积神经网络(CNN)训练模型:分步指南

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

基于卷积神经网络的体育运动项目分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着计算机视觉和深度学习技术的快速发展&#xff0c;利用先进的图像处理技术对体育运动进行智能分类与识别已成为研究热点。传统的运动分析方法通常依赖于人工观察和记录&#xff0c;耗时耗力且容…

Golang | Leetcode Golang题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; func getSteps(cur, n int) (steps int) {first, last : cur, curfor first < n {steps min(last, n) - first 1first * 10last last*10 9}return }func findKthNumber(n, k int) int {cur : 1k--for k > 0 {steps : getSteps(cu…

基于SSM+小程序的在线课堂微信管理系统(在线课堂1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 &emsp1、管理员实现了首页、个人中心、用户管理、课程分类管理、课程信息管理、课程订阅管理、课程视频管理、公告栏管理、留言板管理、系统管理。 2、用户实现了首页、课程信息、公…

Windows系统下批量重命名文件的两种实现方法

我们如果有一批文件&#xff0c;想要大批的重命名文件。例如&#xff0c;将下面的这些图片重命名为boot_itc_00001.jpg、boot_itc_00002.jpg、……、boot_itc_01000.jpg。总不能一个一个改吧&#xff1f; 第一种方法&#xff08;也是最灵活的一种&#xff09;&#xff1a; 借助…

机器学习-KNN分类算法

1.1 KNN分类 KNN分类算法&#xff08;K-Nearest-Neighbors Classification&#xff09;&#xff0c;又叫K近邻算法。它是概念极其简单&#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想&#xff1a;如果一个样本在特征空间中的k个最…

IIs站点发布ERR_UNSAFE_PORT

换个端口&#xff0c;谢谢&#xff01; nice 浏览器对部分端口有特定的保护机制&#xff0c;如果你的应用使用了这些端口&#xff0c;浏览器在发送请求时会触发保护机制&#xff0c;拒绝发送请求&#xff0c;于是&#xff0c;你的服务器应用自然就收不到请求了。 1, // …

树莓派基础命令

目录 1.树莓派简介 2.树莓派使用命令 3.树莓派包管理 4.关于远程连接树莓派的思路&#xff1a; 5.总结 1.树莓派简介 树莓派&#xff08;Raspberry Pi&#xff09;是一款由英国非营利组织树莓派基金会开发的小型、低成本的单板计算机&#xff0c;最初设计目的是为了让学生…