C语言的字符数组,字符串,字符串常量

一、字符数组与字符串

首先来看一段源代码:

#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.字符串常量(不允许修改):试图修改字符串常量

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页