1. 字符串
1.1字符数组
char word[] = {‘H’,’e’,’l’,’l’,’o’,’!’};
这是一个字符数组,并不是字符串,也不能用字符串的计算方法进行计算
字符串
1.2字符串
char word[] = {‘H’,’e’,’l’,’l’,’o’,’!’,’\0’};
以0结尾的一串字符,可以当做字符串进行计算;
0标志字符串的结束,在但它 字符串的一部分,计算字符串长度的时候不包含0;
字符串以数组的形式存在,以数组或指针的形式访问(大多数以指针形式);
string.h里面有很多处理字符串的函数。
2.字符串变量
char *str = “hello”;
一个指针str,里面放的是字符串hello。
char word[] = “hello”;
用一个数组进行定义,存放字符串hello。
char line[10]= “hello”;
用一个长度为10的数组存放字符串hello。
2.1字符串处理
C语言字符串是以字符数组的形态存在的;
不能用运算符对字符串进行运算;
通过数组的方式可以遍历字符串;
唯一特殊的地方是字符串自面量可以用来初始化字符数组;
C语言标准库提供了一些字符串计算函数。
2.2字符串常量定义
char* s=”hello,world!”;
s是一个指针,初始化为指向一个字符串常量,由于这个常量所在的地方,实际上是 const char* s,但是C语言编译器不接受const的写法,但是试图对s所指的字符串进行写入会导致严重的后果。
如果需要修改字符串,应该使用数组,写法如下:
char s[] = “hello,world!”;
2.3数组与指针
我们在需要使用一个字符串的话,我们应该使用指针还是数组呢?
数组:这个字符串在这里,作为本地变量,它的空间自动被回收
指针:这个字符串不知道在哪里,通常只读的情况可以只用,作为参数使用,需要进行动态分配空间。
综上,如果要构造一个字符串,使用数组;如果要处理一个字符串,使用指针。
2.4 char*
通常我们可能会说char就是表示字符串,但是这种说法并不确切。
字符串可以表达为char的形式,但是char不一定是字符串,它的本意是指向字符的指针,可能指向的是字符数组(就像int一样,可能指向单个int,也可能指向一个int数组)。
只有它所指的字符数组有结尾的0,才能说它指向的是字符串。
3. 字符串的输入输出
3.1字符串赋值
char *t=”title”;
char *s;
s=t;
这一段代码实际并没有产生新的字符串,只是让指针s指向了t所指的字符串,对s做的操作就是对t的操作。
3.2字符串输入输出
char word[8]; //定义了一个长度为8个字节的数组
scanf(“%s”,word);
printf(“%s\n”,word);
scanf读入一个单词(到空格、tab或者回车为止),字符串输入输出使用%s。
但是由于不知道读入内容的长度,这里的scanf是不安全的。
常见错误:
char* string;
scanf(“%s”,string);
以为char*就是字符串类型,定义了一个字符串类型的变量sring就可以使用了,由于没有对string进行初始化为0,所以不一定每次运行都会出错,但这并不是说我们可以这么做。
空字符串
char buffer[100]=””;
这是表示一个空字符串
char buffer[]=””;
需要注意,这个数组的长度只有1。
4. 字符串数组
如果需要一个数组来存放一些字符串,我们应该怎么做呢?
① char a[][]
char a[][10]={"hello","world","!"};
表示a[0]中存放的是“hello\0”,a[1]里存放“world\0”…
② char *[]
char *[]={"hello","world","!"};
表示a[0]中有一个指针,指向外面某一个地方,其中存放有“hello\0”, a[1]中有一个指针,指向外面某一个地方,其中存放有“world\0”…