C语言字符串详解

字符串详解

定义

输入输出

思考一:

 思考二:

思考三

字符串的转义字符

思考四

常见的字符串函数

strcpy  拷贝数组

strlen  输出字符串长度

strcat 连接俩个字符串

strcmp 比较俩个字符串的大小

strupr  把字符串里面的小写转换成大写形式

strlwr  把字符串里面的大写转换成小写形式

字符串数组

进阶 指针

指针使用:

常见误区:

思考五:

字符串详解

定义

C 语言没有单独的字符串类型,字符串被当作字符数组,即char类型的数组

  • char str[20]="helloworld";
  • char str[20]={"hello"};
  • char str[20]={'h','e','l','l','o'};

双引号是代表是一个字符串常量,单引号代表是一个字符常量。

编译器会给数组分配一段连续内存,所有字符储存在相邻的内存单元之中。在字符串结尾,C 语言会自动添加一个全是二进制0的字节,写作'\0'字符,表示字符串结束。字符'\0'不同于字符0前者的 ASCII 码是0(二进制形式00000000),后者的 ASCII 码是48(二进制形式00110000

在定义时若是担心数组大小不够  可以用下面这种写法:

char s[]="hello,acm";

编译器会自动给大小 ,这个大小是刚好合适的 是10.

ASCII 码对照表

史上最全ASCII码对照表0-255(%d)-CSDN博客 

输入输出

C语言字符串详解_第1张图片

输入输出字符的时候 上面俩种写法是相同的

但是输入字符串的时候 scanf 和 gets 是有区别的

gets 的输入分隔符 只有回车,所以  gets  是能够读入空格的,    gets  是可以读取到 空的回车的

scanf 输入分隔符 可以是回车也可以是 空格,scanf 是不能读取到 空的回车的。

puts 在输出字符串的时候 会给你自动加 回车符号 

printf 不会自动加回车

思考一:

如果我输入 回车 回车 123 456  答案会是什么

C语言字符串详解_第2张图片

 思考二:

这样写算是对的吗? 如果是对的,那你觉得会输出什么呢

C语言字符串详解_第3张图片

思考三

如果我想输入 123 和 'l' 的值  上面的这串代码能输入正常吗 ,如果不能,为什么。

C语言字符串详解_第4张图片

字符串的转义字符

C语言——转义字符_c语言转义字符-CSDN博客

比较常用的转义字符:

  • \n  回车
  • \0  结束符
  • \\   输出一个\ 
  • \0 开头 或者 \接1-3位数字 代表是8进制
  • \x 开头 是十六进制数字 没有位数要求
思考四

下面的输出结果是什么 ,为什么

C语言字符串详解_第5张图片

常见的字符串函数

strcpy  拷贝数组

用法:

C语言字符串详解_第6张图片

strlen  输出字符串长度

C语言字符串详解_第7张图片

和sizeof不同的是  strlen 是输出字符串长度  ,以 \0 作为结束符,sizeof 纯粹的是计算 占用的空间大小。char 类型 字符占用一个字节。

strcat 连接俩个字符串

C语言字符串详解_第8张图片

strcmp 比较俩个字符串的大小

按照ASCII码来比较的。如果相等会返回 数字 0 因为编译器的不同 ,有些编译器小于的结果就是 -1 大于的结果就是 1 ,另外一些编译器返回的是 出现第一个不相同的字符的ASCII码的 相减的结果。

C语言字符串详解_第9张图片

strupr  把字符串里面的小写转换成大写形式

C语言字符串详解_第10张图片

strlwr  把字符串里面的大写转换成小写形式

C语言字符串详解_第11张图片

字符串数组

如果一个数组的每个成员都是一个字符串,则需要通过二维的字符数组实现,每个字符串本身就是一个字符数组,多个字符串再组成一个数组。

定义

char str[10][20]={"hello","acm","!"};

只能省略 第一个中括号的数字 ,第二个不能省略。省略第二个参数会给你自动加,就像字符串会自动计算长度。

使用,正常和整形一维数组一样使用

C语言字符串详解_第12张图片

进阶 指针

指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。

C语言字符串详解_第13张图片

*这个符号除了表示指针以外,还可以作为运算符,用来取出指针变量所指向的内存地址里面的值。

C语言字符串详解_第14张图片

&运算符用来取出一个变量所在的内存地址

C语言字符串详解_第15张图片

上面定义字符串还可以这样定义:

char *s="1234";

上面代表的是一个指针,指向字符串常量“1234”

下面这样定义的也是对的

C语言字符串详解_第16张图片

我们在使用字符串变量的时候 比如 说这个 

char a[20]="1234"   这个 a 是一个地址,但是这个a 不能修改地址,上面的 s 是可以的,因为 a 具体的 定义是 const char *a  ,  被const 修饰的值 是不能修改的,const 加在哪里,哪个位置就不能动。

指针一定要有指向才能使用,否则就是一个野指针。

C语言字符串详解_第17张图片

上面是因为 a 是地址,所以可以直接指向

C语言字符串详解_第18张图片

这个是因为 ch 是一个变量,而 p 只能被地址赋值,就需要使用地址符号来取出地址,来进行赋值

指针使用:

C语言字符串详解_第19张图片

C语言字符串详解_第20张图片

常见误区:

C语言字符串详解_第21张图片

上面这段代码 因为指针并没有 指向,然后就被 强制要往里面塞值,可是指针本身是不能塞值的,只能依附于有内存空间的去操作,所以这里,编译不会出错,这个 s 是无值的

指针的东西很多,我这里也只是择取了一点,希望大家能够自己去主动学习指针内容。

思考五:

下面这段代码会输出什么呢,为什么?

C语言字符串详解_第22张图片

你可能感兴趣的:(c语言,开发语言)