#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,至少初始化数组长度为12char 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语言中的字符串数组(详细解析)相关推荐

  1. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  2. C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include <s ...

  3. c语言中文字符串数组,详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include #incl ...

  4. c语言中的字符串数组,详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include #incl ...

  5. C语言中的字符串数组

    代码 #include<stdio.h> main() {//字符串数组 可修改char ch1[] = "hello";char ch2[] = "worl ...

  6. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

    之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...

  7. c语言中字符串数组应用,C语言中字符变量字符串和字符数组应用.doc

    C语言中字符变量字符串和字符数组应用 字符变量(type`char`?字符串(string)和字符数组(type`char`arrary)是C语言中非常重要的结构成分,也是应用编程中常发生混淆?导致错 ...

  8. C语言中lwr是谁的缩写,C语言中关于字符串的操作(转)

    浅析C语言中关于字符串的操作(转) 前言:如果您是学C/C 的,对于字符串的操作不是很了解,请您耐心读完.作为我的朋友,我很乐意和您分享我最近的知识积累.毕 竟,网上很少有这么全,这么细的介绍,更少有 ...

  9. c语言字符串前加l,【C】 30_C语言中的字符串

    字符串的概念 字符串是有序字符的集合 字符串是程序中的基本元素之一 C 语言中没有字符串的概念 C 语言中通过特殊的字符数组模拟字符串 C 语言中的字符串是以 '\0' 结尾的字符数组 字符串与字符数 ...

最新文章

  1. 什么是网络可见性?—Vecloud微云
  2. Mysql远程无法连接
  3. ms计算机选择题,MS计算机选择题.docx
  4. 2019计算机考研在职研究生,2019双证在职研究生报名条件
  5. source code怎么用_code-builder代码生成器
  6. linux 移出权限,一起学习在 Ubuntu 上授予和移除 sudo 权限
  7. 生信分析和美图资源推荐!!!
  8. Linux通过端口查找tomcat的路径
  9. 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
  10. 牛腩购物网 8 整合用户留言 重装系统之后iis7.5 sql2008 vs2010安装顺序,AspNetPager 控件的使用,为什么 anp.StartRecordIndex 总是为1...
  11. speedtest命令行linux,Linux或者Mac下命令行speedtest测试网络速度
  12. Linux进程间通信(2)信号量
  13. 搭建redhat本地yum仓库,用于离线更新其它主机
  14. armbian编译安装mentohust 认证锐捷客户端
  15. 硬改TP-WR886N v5 路由器刷入源码编译的openWRT/LEDE系统
  16. centos 7.6编译安装nginx
  17. 【日常分享】RAM和ROM区别
  18. 网站服务器需要备案,网站服务器需要备案
  19. 评测3款高颜值的安卓txt阅读器
  20. BIGD牛魔王UI图标设计iocn主题设计全套高清视频教程

热门文章

  1. excel的if函数中android,excel中if函数使用小技巧分享
  2. 使用ThingJS,前端人员也能轻松搞定物联网开发!
  3. C++ OpenCV透视变换综合练习
  4. ELK日志监控系统搭建
  5. 一道大厂测试开发面试真题,你需要几分钟解答?
  6. 小巧且功能齐全的linux,极简笔记PC版下载_极简笔记最新版下载v1.2.9_数码资源网...
  7. 大疆Phantom无人机ios遥控软件Auotpilot
  8. 上升沿触发与下降沿触发
  9. Cortex-A53、A57、A72、A73 、ARM7,ARM9,Cortex-M3,Cortex-M4,Cortex-A8的区别
  10. 多线程(三)——了解线程