字符串的概念
字符串是有序字符的集合
字符串是程序中的基本元素之一
C语言中没有字符串的概念
C语言中通过特殊的字符数组模拟字符串
C语言中的字符串是以 ‘\0’ 结尾的字符数组
编译器总是会在字符串字面量的末尾添加 ‘\0’
字符串与字符数组
在C语言中:
双引号引用的单个或多个字符是一种特殊的字面量
存储于程序的全局只读存储区
本质为字符数组, 编译器自动在结尾加上 ‘\0’字符
字符串字面量
字符串字面量的本质是一个数组
字符串字面量可以看作常量指针
字符串字面量中的字符不可改变
字符串字面量至少包含一个字符
/* 测试代码 */
#include <stdio.h>
int main()
{
char b = "abc"[0]; // a
char c = *("123" + 1); // 2
char t = *""; // 0
printf("%c\n", b);
printf("%c\n", c);
printf("%d\n", t);
printf("%s\n", "Hello"); // hello
printf("%p\n", "World"); // 00403076
return 0;
}
运行结果
a
2
0
Hello
00403076
字符串的长度
字符串的长度就是**字符串所包含字符的个数
字符串长度指的是第一个 ‘\0’ 字符前出现的字符个数
通过 ‘\0’ 结束符来确定字符串的长度
函数 strlen 用于返回字符串的长度
字符串相关函数都依赖于结束符 ‘\0’
字符串的相等比较
字符串之间的相等比较需要用函数 strcmp 完成
不可直接用 == 进行字符串直接的比较
完全相同的字符串字面量的 == 比较结果为 false (地址不同)
注意: 一些现代编译器能将相同的字符串字面量映射到同一个无名字符数组, 因此 == 比较结果为 true 但我们不能编写依赖特殊编译器的代码
/* 测试代码 */
#include <stdio.h>
#include <string.h>
int main()
{
#define S1 "D.T.Software"
#define S2 "D.T.Software"
if( strcmp(S1, S2) == 0 )
{
printf("Equal\n");
}
else
{
printf("Non Equal\n");
}
return 0;
}
运行结果
Equal