博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言进阶:第30课:C语言中的字符串
阅读量:3736 次
发布时间:2019-05-22

本文共 1481 字,大约阅读时间需要 4 分钟。

字符串的概念:

字符串是有序字符的集合;

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

C语言中,双引号引用的单个或多个字符是一种特殊的字面量

存储于程序的全局只读存储区;//被编译后存储于只读存储区
本质为字符数组,编译器自动在结尾加上"\0"字符。

字符串字面量的本质是数组——不能被改变。

#include 
int main(){ char ca[] = {'h', 'e', 'l', 'l', 'o'}; //字符数组 char sa[] = {'h', 'e', 'l', 'l', 'o', '\0'}; //字符串 char ss[] = "hello world!"; //字符串 char *str = "hello world~"; //字符串 printf("%s\n", ca); printf("%s\n", sa); printf("%s\n", ss); printf("%s\n", str); return 0; }

编译运行:

~/will$ ./a.outhello��Xq�hello world!  hellohello world!hello world~
所有与字符串相关的操作都与字符串末尾的"\0"有关,

没有"\0"则会退化为字符数组,字符数组是不能作为参数被字符串处理函数处理。(%s)

字符串字面量的本质是一个数组;
字符串字面量可以看做
常量指针
字符串字面量中的字符不可改变;

字符串字面量至少包含一个字符。

下面的表达式正确吗?

char b = "abc"[0];		 //数组访问操作符访问第一个字符数组的字符,注意此处就是字符数组。	char c = *("123" + 1);           //指针运算	char t = *"";			 //"\0"的ASIC码

编译运行下面代码:

#include 
int main(){ char b = "abc"[0]; char c = *("123" + 1);    //常量指针 char t = *""; printf("%c\n", b); printf("%c\n", c); printf("%d\n", t); return 0; }

输出结果:

~/will$ ./a.outa20
字符串的长度:
字符串的长度就是字符串所包含
字符的个数
字符串长度指的是第一个'\0'字符前出现的字符个数;

通过'\0'结束符确定字符串的长度;

观察下面代码:

#include 
#include
int main(){ char s[] = "hello\0world"; int i; for(i=0; i

编译运行:

~/will$ ./a.outhelloworldhello1253

可见,对于字符数组,是不能被字符串处理函数处理的,能被处理的只能是字符串,而字符串以'\0'结尾,所以字符串为“hello”。使用sizeof(s)取值是对整个字符数组加上最后的'\0'进行计算。而strlen()是对字符数量进行计算,不包括最后的'\0'。

小结:C语言中通过字符数组模拟字符串

C语言中的字符串使用'\0'作为结束符
字符串字面量的本质为字符数组
字符串相关函数都依赖于结束符'\0'。

转载地址:http://lwdin.baihongyu.com/

你可能感兴趣的文章
Freemarker使用xml写word模板-遇到的坑
查看>>
PyQt5基础用法ui转py后需要修改的地方
查看>>
Scanner类
查看>>
基本类型包装类
查看>>
System类常用方法
查看>>
Runtime类、Math类和Random类的常用方法
查看>>
数据处理类常用方法
查看>>
Collections和Character类 常用静态方法
查看>>
HTML之Javascript——BOM浏览器对象模型
查看>>
JAVA基础中的基础
查看>>
JDBC基础操作
查看>>
连接池
查看>>
Servlet的使用——重定向和转发
查看>>
JSP技术的使用——好像过时了唉。。。。。
查看>>
MVC模式概述
查看>>
Web之过滤器Filter
查看>>
JSON和AJAX
查看>>
web之监听器listener
查看>>
类加载器
查看>>
数据库设计
查看>>