我是靠谱客的博主 醉熏画板,最近开发中收集的这篇文章主要介绍C语言——字符串学习笔记(1)种一棵树最好的时间是十年前,其次是现在 !,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

种一棵树最好的时间是十年前,其次是现在 !

之前学习过数组,相信你已经耳闻过字符数组这一词了吧!下面我们来学习了解一下C语言的字符串常量(C语言中称为字符串字面量)和字符变量。

一、字符串字面量

1.字符串字面量中的转义序列

字符串字面量也可以包含转义序列(n等等转义序列)。注意:十六进制和八进制数的转义序列较为复杂,要小心使用!

例如:

"hellonworldn"

输出就是:hello

                  world

2.延续字符串变量

有时候字符串字面量太长而不能单独放一行,通常就会在最后放一个 结尾,那么C语言就可以在下一行继续输入。但是这样缩进效果就看着不明显了,例子如下:

#include<stdio.h>
int main(void)
{
	printf("ABCDE
	FGHIn");
	
	printf("abcde
fghin");
	printf("123"
	"456n");
}

可以看到,使用 时如果想要把字符串连续在一块输出就没有办法保证缩进格式,所以有一种办法来延续字符串字面量,即"..." "..."两个连起来就可以合并为同一条字符串。

3.储存字符串字面量:

本质上来说,C语言是把字符串字面量当做字符数组来处理的。(但是字符数组不是字符串!字符串最后会有一个!)

当C语言中出现长度为n的字符串字面量时,C语言就会为它分配一个长度为 n+1 的空间! 这块内存是用来储存字符串字面量中的字符,而多出来的一个空间是用来标志字符串末尾的额外字符(空字符)这个就是字符串字面量结束的标志,用转义字符代替,注意:不是 '0',空字符的码值为0,而零字符的ASCII码为48。

例如:字符串字面量"abc"是作为有4个字符的数组来储存的(a、b、c、 )

          字符串字面量" "(字符串字面量可以为空。且单独一个空字符储存 即 )

那么我们使用字符串字面量为printf函数传参时是传递了什么呢?既然是当做数组处理了,那么编译器自然就把他看做成char * 类型的指针。

例如:printf("abc");

          当调用printf函数时,会传递"abc"的地址(即指向储存字母a的内存单元的指针)

来看一下下面的代码及其运行结果

#include<stdio.h>

int main()
{
	char *a,*b,c;
	a = "abc";
	b = "";
	c = '0';
	
	printf("a = %sn",a);	
	printf("b[0] = %dn",b[0]);
	printf("b = %sn",b); 
	printf("c = %cn",c);
	return 0;
}

""空字符串中只有一个元素 ,它就是整数0,但不是字符常量'0'!!!

4.字符串字面量的操作

刚才我们看到了这样的代码

#include<stdio.h>

int main()
{
	char *a,*b,c;
	a = "abc";
	b = "";
	c = '0';
	
	printf("a = %sn",a);	
	printf("b[0] = %dn",b[0]);
	printf("b = %sn",b); 
	printf("c = %cn",c);
	return 0;
}

通常,在C语言能使用char *指针的地方可以使用字符串字面量。例如字符串字面量可以出现在赋值符号的右边比如上面的char *a,a = "abc"这个赋值操作是让指针a指向了字符串的第一个字符。

C语言允许对指针取下标,因此我们也可以对字符串字面量取下标。例如 char ch; ch = "abc"[0]。

注意:不要去修改字符串字面量!(字符串字面量位于程序的一个叫做“代码段”的地方,而且是只读的,这里不多说)

二、字符串变量

在某些编程语言中会专门为字符串变量提供一种数据类型,而C语言中我们通常会使用一维数组来存储字符串(但一定要记得保证字符串最后以空字符结尾!!!)

当我们自己编写字符串处理函数时也好考虑好空字符的处理!

#define STR_LEN 10

  ...

char str[STR_LEN + 1];//这里把STR_LEN定义成10强调str最多可以储存10个字符的字符串,然后在str数组的声明中对STR_LEN+1来储存空字符。

当然了,声明长度为STR_LEN + 1 的字符数组并不意味着他总是用于存放长度为STR_LEN 的字符串,字符串的长度取决于空字符的位置,而不是取决于存放字符串的字符数组的长度。STR_LEN +1只是限制了字符串的最大长度。

1.初始化字符串变量

可以在声明的时候进行初始化

char str1[] = "hello world"

由于我们一定要确保数组的长度大于字符串字面量的长度,所以我们可以省略它的长度,这种情况下编译器会自动为它补充一个空字符。

字符串字面量"hello world"复制到数组str1中,然后编译器自动补充空字符,这样就可以看做成一个字符串变量了。

当然还有其他的初始化办法,不过记上面这个就行了,上面这个是最常用的。

2.字符数组与字符指针

char *a = "hello world"
char a[] = "hello world"

这两个看起来是一样的声明,前者是声明了一个指针a,后者声明了一个数组a ,都可以看做是字符串。然而两者是有较大的区别的,我们不能认为上面两者可以互换。

在声明为指针时,我们是不能去修改字符串字面量的。(还记得前面提到的只读区代码段吧)

注意:指针变量一定要初始化后再去使用!

3.puts()、gets()、printf()、scanf()、fgets()函数的使用。

 

 

最后

以上就是醉熏画板为你收集整理的C语言——字符串学习笔记(1)种一棵树最好的时间是十年前,其次是现在 !的全部内容,希望文章能够帮你解决C语言——字符串学习笔记(1)种一棵树最好的时间是十年前,其次是现在 !所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部