IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 解释C语言中的字符串数组(详细解析) -> 正文阅读

[C++知识库]解释C语言中的字符串数组(详细解析)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//#include <cstdio>

//cstdio是将stdio.h的内容用C++头文件的形式表示出来。
//stdio.h是C标准函数库中的头文件,即:standard buffered input& output。提供基本的文字的输入输出流操作(包括屏幕和文件等)。由于C语言并没有提供专用于文字输入输出的关键字,所以该库是最普遍的C语言程序加载库。
//cstdio 和 stdio.h是有差别的,并不是同样的文件。
//stdio.h是以往的C和C++的头文件,cstdio是标准C++(STL),且cstdio中的函数都是定义在一个名称空间std里面的,如果要调用这个名字空间的函数,必须得加std::或者在文件中声明using namespace std。

//在新的C++标准中,生成新头文件的方法仅仅是将现有C++头文件名中的.h去掉。例如,<iostream.h>变成了< iostream>,<complex.h>变成了<complex>等等。
//对于C头文件,采用同样的方法,但在每个名字前还要添加一个c。所以C的<string.h>变成了<cstring>, <stdio.h>变成了< cstdio>,等等。 标准C头文件如<stdio.h>继续被支持。头文件的内容不在std中。
//具有C库功能的新C++头文件具有如这样的名字。它们提供的内容和相应的旧C头文件相同,只是内容在std中。
void test01()
{
	//1、字符数组的定义与初始化
	//字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。

	//char c01[10] = "abcdefghijk";		报错,数组长度为12,至少初始化数组长度为12
	char c01[12] = "abcdefghijk";
	printf("%s\n", c01);

	//如果花括号中提供的字符个数大于数组长度,则按语法错误处理
	//若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' ) 
}

void test02()
{
	//在c语言中,将字符串作为字符数组来处理。(c++中不是)	
	//系统对字符串常量也自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的

	//有了结束标志'\0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如char str[])
	//说明:'\n’代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。
	//对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

	char c01[] = { "I am happy" };      // 可以省略花括号,如下所示
	char c02[] = "I am happy";
	printf("%s\n", c01);
	printf("%s\n", c02);

	//注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值
	//下面的赋值方法是错误的
	//char c03[];
    //c03 = "I am happy";

	//不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"的最后由系统自动加上一个'\0')
	//因此,上面的初始化与下面的初始化等价

	//以下两个字符串·前者的长度是11,后者的长度是10.
	char c03[] = { 'I',' ','a','m',' ','h','a','p','p','y','\0' };
	char c04[] = { 'I',' ','a','m',' ','h','a','p','p','y' };
	printf("%d\n", sizeof(c03));
	printf("%d\n", sizeof(c04));

	//说明:字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面这样写是完全合法的。
	//char c05[5] = { 'C','h','i','n','a' };
	//但是最后的输出会带有一堆乱码,知道计算机在内存上的输出遇到'\0'为止
	char c05[10] = { 'I' , ' ' , 'a' , 'm' , ' ' , 'h' , 'a' , 'p' , 'p' , 'y' };
	printf("%s\n", c05);
	//输出会是I am happy加一堆乱码,因为上面的字符数组没有在结尾定义一个'\0'

	//输出会使I am happy,数组还有内存空间,字符数组会在末尾添加一个'\0',这样就能正确输出
	char c06[11] = { 'I' , ' ' , 'a' , 'm' , ' ' , 'h' , 'a' , 'p' , 'p' , 'y' };
	printf("%s\n", c06);
}

void test03()
{
	//3、字符串的表示形式
	//在C语言中,可以用两种方法表示和存放字符串:
	//(1)用字符数组存放一个字符串
	char c01[] = "I love China";

	//(2)用字符指针指向一个字符串
	char* c02 = "I love China";

	//C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量
	//程序在定义字符串指针变量c02时会把字符串首地址(即存放字符串的字符数组的首地址)赋给c02。

	printf("%s\n", c01);
	printf("%s\n", c02);
}

int main()
{
	test01();
	test02();
	test03();

	return 0;
}



运行结果:

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:50:34  更:2022-03-03 15:50:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:01:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码