一、字符数组与字符串
首先来看一段源代码:
#include <stdio.h>
int main()
{
char arr[10] = {'a','b','c'};//剩余部分为'\0'
char brr[] = {'a','b','c'};//不是字符串,因为没有'\0'
char crr[10] = {"abc"};//字符数组特有
char drr[10] = "abc";//字符数组特有 **
char err[] = "abc";//字符数组特有 **
char frr[10] = "";
printf("%s\n",arr);
printf("%s\n",brr);
printf("%s\n",crr);
printf("%s\n",drr);
printf("%s\n",err);
printf("%s\n",frr);
return 0;
}
输出结果:
可以看出,字符数组与字符串很像,在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符组数,即用一个字符型数组来存放一个字符串,即字符串就是末尾有'\0'的字符数组
二、字符串与字符串常量
我们继续看下面代码:
#include <stdio.h>
int main()
{
char *str1 = "abcde";//字符串常量
char str2[] = "abcde";//字符数组,有\0,所以也是字符串
//str1[0] = 'x';//写错误
str2[0] = 'x';
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}
结果为:
既然没有字符串变量,那字符串常量怎样存在?
常量是不可变的量,所以字符串常量就是我们用双引号""定义的,
那怎么使用字符串常量?
使用正如源代码中,使指针指向字符串常量所在的首地址,使用指针就OK了!
三、字符串的崩溃
字符串崩溃主要有两个原因:
1.字符串变量(字符数组):越界
2.字符串常量(不允许修改):试图修改字符串常量