字符数组和字符串

  • 字符数组
  • 字符串结束标志
  • 字符串长度


字符数组

用来存放字符的数组称为字符数组

char str_1[10];  // 一维字符数组
char str_2[5][10];  // 二维字符数组

字符数组实际上是一系列字符的集合,也就是字符串(String)

C语言规定,可以将字符串直接赋值给字符数组(单个字符多次赋值过于麻烦)

// 通常情况
char str[14] = {"www.baidu.com"};
char str[14] = "www.baidu.com";  // 这种形式更加简洁(实际开发中常用)

// 复杂情况
str[0] = 'w'; str[1] = 'w'; str[2] = 'w';
str[3] = '.'; str[4] = 'b'; str[5] = 'a'...

重点!!!

字符数组只有在定义时才能将一整个字符串赋给它,一旦定义完了,就只能单个字符进行赋值了

char str[5];
str = "love"  // 错误!!!

// 正确赋值如下
str[0] = 'l'; str[1] = 'o'; str[2] = 'v'; str[3] = 'e';

字符串结束标志

字符串是一系列连续字符的组合,要想在内存中定位一个字符串,除了要知道它的开头,还要知道它的结尾,通过字符数组名或者字符串名可以找到字符串的开头,在C语言中,字符串总是以'\0'作为结尾,所以'\0'也被称为字符串结束标志,或者字符串结束符,也就是说通过此字符可以找到字符串的结尾

'\0'是 ASCII码表中的第 0个字符,称为空字符(该字符既不能显示,也没有控制功能,输出该字符不会有任何效果)唯一的作用就是作为字符串结束标志

重点!!!

将长字符串存到数组中 python 将一串字符串存到数组_字符数组

由双引号(" ")包围的字符串会自动在末尾添加'\0'

char str[] = "C program";  // 此时字符数组的长度为:10(因为最后有 '\0')

逐个字符地给数组赋值并不会自动添加'\0'

char str[] = {'l', 'o', 'v', 'e'};  // 此时字符数组的长度为:4(因为最后没得 '\0')

论字符数组添加字符'\0'的重要性!!!

#include <stdio.h>

int main(){
	// 解决方法 1:初始化数组状态为 0(即每个字符都为字符 '\0') 
//	char str[6] = {0};
	for(int i = 0,c = 65; c < 70; i++,c++){
		str[i] = c;
	} 
	// 解决方法 2:在给字符数组赋值完毕后,将末尾项赋值为字符 '\0' 
//	str[5] = '\0';
	printf("%s\n", str);  // ABCDE
    return 0;
}

很多编译器并不会把局部数组的内存都初始化为 0值,也就是说输出字符数组时,往往很难找到字符串的结束标志,也就导致输出乱码

字符串长度

字符串长度,就是字符串包含了多少个字符(不包括最后的结束符'\0'

#include <stdio.h>
#include <string.h>

int main(){
	char str[5] = "love";
	printf("%d\n", strlen(str));  // 4
    return 0;
}