C语言字符串和字符串结束标志

2023-05-16

1.在C语言中,是将字符串作为字符数组来处理的。
2.C语言规定了一个“字符串结束标志”,以字符’\0’作为结束标志。如果字符数组中存有若干字符,前面九个字符都不是空字符(‘\0’),而第十个字符是’\0’,则认为数组中有一个字符串,其有效字符为9个。也就是说,在遇到字符’\0’时,表示字符串结束,把它前面的字符组成一个字符串。在实际工作中,人们往往关心的是字符串的有效长度而不是字符数组的长度。
注意:C系统在用字符数组存储字符串常量时会自动加一个’\0’,作为结束符。
3.在程序中往往依靠检测’\0’的位置来判断字符串是否结束,而不是根据字符数组的长度来决定字符串的长度。
但是在定义字符数组的时候应该估计实际字符串长度,保证数组长度始终大于字符串的实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应该是数组长度大于最长的字符串的长度。
说明:'\0’代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不用做。用它来作为字符串结束的标志不会产生附加的操作或增加有效字符,只起一个辨别的标志作用。
4.补充一种字符数组初始化的方法:用字符串常量来使字符数组初始化。例如:

char []={"I am happy"};

可以直接写成

char c[]="I am happy";

这两个初始化等价,数组的长度都是11,因为字符串常量的最后由系统加上一个’\0’。
但是,下面这种情况,两个初始化是不等价的:

char c[]={'I',' ','a','m',' ','h','a','p','p','y','\0'};

不与下面的等价

char c[]={'I',' ','a','m',' ','h','a','p','p','y'};

前者长度为11,后者长度为10。
5.字符数组并不要求它的最后一个字符为’\0’,甚至可以不包含’\0’。是否需要加’\0’,完全根据需要决定。
包含’\0’:

int main()
{
	char c[] = { "C program.\0" };
	printf("%s", c);
	return 0;
}

不包含’\0’:

int main()
{
	char c[] = { "C program." };
	printf("%s", c);
	return 0;
}

结果都是:
请添加图片描述
这是因为"C program."作为一个字符串,末尾默认有一个’\0’。
6.由于系统在处理字符串常量存储时会自动加一个’\0’,因此,为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中也常常人为加上一个’\0’。

int main()
{
	char c[] = { 'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};
	printf("%s\n", c);
	return 0;
}

结果为:请添加图片描述
这是因为该字符数组中没有结束标志所以打印出来一些其他的随机值。
给字符数组后面加上’\0’之后:

int main()
{
	char c[] = { 'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.','\0'};
	printf("%s\n", c);
	return 0;
}

结果为:
请添加图片描述
7.定义以下的字符数组:

char c[] = { "C program." };

由于系统自动在字符串常量的最后一个字符后面加了一个’\0’,因此,c数组的存储情况如下:
请添加图片描述
若想有一个新的字符串代替原有的字符串"C program.",如从键盘输入"Hello"分别赋给c数组中前面5个元素。如果不加’\0’的话,字符数组中的字符如下:
请添加图片描述
新字符串和老字符串连成一片,无法区分开。输出字符数组中的字符串,如下:

int main()
{
	char c[] = { "C program." };
	for (int i = 0; i < 5; i++)
	{
		scanf("%c", &c[i]);
	}
		printf("%s", c);
	return 0;
}

请添加图片描述
如果在"Hello"后面加上’\0’,它取代了第6个字符’g’。在数组中的存储情况如下:
请添加图片描述
‘\0’是字符串结束标志,在输出字符数组中的字符串时,遇到’\0’就停止输出,因此只输出字符串"Hello"。而不会输出"Hellpgram."。

int main()
{
	char c[] = { "C program." };
		scanf("%s", c);
		printf("%s", c);
	return 0;
}

请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言字符串和字符串结束标志 的相关文章

  • 学习心得

    敏捷开发宣言读后感 敏捷开发的原则 1 迭代式开发 即整个开发过程被分为几个迭代周期 每个迭代周期持续的时间一般较短 通常为1到6周 2 增量交付 产品是在每个迭代周期结束时被逐步交付使用 每次交付的都是可以被部署 能给用户带来即时效益和价
  • EKF SLAM Matlab仿真实践详解(附源码)

    EKF SLAM Matlab仿真实践详解 xff08 附源码 xff09 为提供更好的阅读体验 xff0c 详细内容及源码请移步https github com Nrusher EKF SLAM 或 https gitee com nru
  • FreeRTOS解析:List

    FreeRTOS解析 xff1a List 受博客限制 xff0c 如果您想获得更好的阅读体验 xff0c 请前往https github com Nrusher FreeRTOS Book或者https gitee com nrush F
  • FreeRTOS解析:任务的创建(TASK-2)

    任务的创建 受博客限制 xff0c 如果您想获得更好的阅读体验 xff0c 请前往https github com Nrusher FreeRTOS Book或者https gitee com nrush FreeRTOS Book下载PD
  • FreeRTOS解析:任务切换(TASK-3)

    任务切换 受博客限制 xff0c 如果您想获得更好的阅读体验 xff0c 请前往https github com Nrusher FreeRTOS Book或者https gitee com nrush FreeRTOS Book下载PDF
  • man命令使用指南

    man命令是linux下查找shell命令 函数等使用方法的利器 最简单的使用方式是man lt the thing you want gt 掌握上面那条命令应该也可以满足80 的使用场景了 这里记录一些更加深入的man命令使用的方法 xf
  • Vscode 搭建舒适的 Markdown 编辑环境

    文章目录 1 显示风格2 图片插入3 表格处理4 其他 1 显示风格 使用 Markdown notebook Microsoft xff0c 这个插件可以实现markdown的预览和编辑在同一页面下 xff0c 显示效果如下 外链图片转存
  • 如何启动英伟达TX2的两个CAN口

    英伟达的TX2有两路CAN xff0c 默认情况下是没有启动的 xff0c 通过ifconfig命令可以查看CAN是否启动 xff0c 如果启动了 xff0c 可以看到下面的设备 如果没有相应的设备 xff0c 则说明CAN没有启动起来 通
  • DDR基础

    欢迎关注我的博客网站nr linux com xff0c 图片清晰度和 xff0c 排版会更好些 xff0c 文章优先更新至博客站 DDR全称Double Data Rate Synchronous Dynamic Random Acces
  • OpenCV实验系列之Mask操作

    OpenCV实验系列之Mask操作 注意 xff1a 以下内容根据opencv官网提供的教程结合个人理解所得 xff0c 仅是个人学习笔记 xff0c 可能存在错误或偏差 xff0c 欢迎指正 OpenCV实验系列之Mask操作 Mask矩
  • UART通信可否只接VCC、RXD、TXD而不接GND?

    使用串口登录树莓派时出现的问题 xff1a 将TF卡插入到树莓派 xff0c 然后开启电源 xff0c 采用串口查看登录界面时出现误码 xff0c 最后排查得出是没有共地 那么假设有两款5V单片机 xff0c 独立供电 按理 xff0c 连
  • Linux 网络编程项目 —— FTP 网盘

    文章目录 项目简介知识点描述项目功能指令远程功能指令本地功能指令 使用的关键函数access 函数popen 函数chdir 函数strtok 函数strncmp 函数linux system函数是否执行成功判断方法 基本流程服务端客户端
  • VMware虚拟机

    文章目录 VMware虚拟机联网三种网络连接方式桥接模式联网原理NAT模式联网原理NAT模式配置手动配置网络关于apt命令关于ifconfig命令简介命令格式命令参数使用实例显示网络设备信息 激活状态的 开启 禁用网络 虚拟机内核与逻辑处理
  • 智能无障碍轮椅——ESP8266总体介绍及ESP-01S入门调试

    文章目录 一 ESP8266 介绍二 ESP8266的多种型号1 DT 062 ESP 01和ESP 01S 左边ESP 01S xff0c 右边ESP 01 3 ESP 12F 三 两种开发方式1 AT指令开发方式2 SDK开发方式 四
  • ROS操作系统快速入门

    文章目录 一 简介模块化 分布式的系统设计 二 安装虚拟机与ROS系统安装虚拟机的缺点安装ubuntu20 04 三 ROS系统安装切换镜像源视频教程 四 ROS应用商城APT源简介与指令介绍案例ros应用商城介绍 五 GIthub建立如下
  • Proteus 仿真8086+8255,运行时错误的解决

    要实现的功能 xff1a 通过开关控制流水灯的显示方式 电路原理图 xff1a 汇编源程序 xff1a CODE SEGMENT ASSUME CS CODE START MOV AL 90H OUT 36H AL AGAIN IN AL
  • 7年程序员项目经历归纳总结

    工作五年 xff0c 敲代码7年 xff0c 科研院所 国企 私企都有过经历 xff0c 发现项目的开发过程总是那么的相似 xff0c 过程举例如下 xff08 事实上画个流程图可能更好 xff0c 但是懒得画了 xff09 xff1a 1
  • Ubuntu20.04+ros(noetic)+RealsenseT265+ORB_SLAM3(一)

    noetic安装的很顺利 xff0c 照着官方文档来就行 xff1b Kalibr的编译 xff1a 一开始参考了 Ubuntu16 04 43 RealsenseT265跑通VINS Fusion IATBOMSW的博客 CSDN博客 x
  • 如何开启英伟达TX2的所有USB3.0口

    TX2新烧完系统之后 xff0c 默认只有一个USB3 0口使能了 xff0c 实际上TX2最多可以使能3个USB3 0口 xff0c 在TX2的design guide中 xff0c 可以找到相应的配置说明 xff0c 见下图 TX2默认

随机推荐