关键词:字符串的概念、字符数组与字符串、字符串字面量、字符串的长度
1. 字符串的概念
- 字符串是有序字符的集合
- 字符串是程序的基本元素之一
- C语言中没有字符串的概念 ;通过特殊的字符数组模拟字符串,字符串是以 '\0' 结尾的字符数组。
2. 字符数组与字符串
- 在C语言中,双引号引用的单个或多个字符是一种特殊的字面量;字符串当作一个全局的字符数组存储于全局只读存储区中,本质上为字符数组,编译器自动在结尾加上'\0'字符。[注意: 不论字符数组的最后一个字符是否为'\0',编译器都会自动在结尾处加上'\0'字符]。
char sa[] = {'w', 'o', 'r', 'l', 'd', '\0'};
char ss[] = "hello world!";
char* str = "hello world!";
总结: 在c语言中,所有与字符串相关的操作和所有与字符串相关的函数都依赖于'\0'这个结束符,如果没有'\0',则为字符数组,字符数组不能作为参数被字符串处理函数所处理。
3. 鲜为人知的小秘密
- 字符串字面量的本质是一个数组;
- 字符串字面量可以看作常量指针;
- 字符串字面量中的字符不可改变,因为字符串字面量被编译器编译过后存储有全局的只读存储区中。
- 字符串字面量至少包含一个字符——'\0'。
4. 字符串字面量
字符串字面量是一个无名数组。
#include<stdio.h>
int main()
{
char b = "abc"[0];
char c = *("123" + 1);
char t = *"";
printf("b = %c\n", b);
printf("c = %c\n", c);
printf("t = %d\n", t);
printf("%s\n", "hello");
printf("%p\n", "world");
return 0;
}
输出结果:
b = a
c = 2
t = 0
hello
0x804857e
5. 字符串的长度
- 字符串的长度就是字符串所包含字符的个数;
- 字符串长度指的是第一个'\0'字符前出现的字符个数;
- 通过'\0'结束符来确定字符串的长度;
- 函数strlen用于返回字符串的长度。
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "hello\0world";
int i = 0;
for(i=0; i<sizeof(s)/sizeof(char); i++)
{
printf("%c\n", s[i]);
}
printf("sizeof(s) = %d\n", sizeof(s));
printf("s = %s\n", s);
printf("strlen(s) = %d\n", strlen(s));
return 0;
}
输出结果:
h
e
l
l
o
w
o
r
l
d
sizeof(s) = 12
s = hello
strlen(s) = 5
总结:strlen函数(所有的字符串处理函数)处理字符串字面量时,依赖于第一个'\0',读取到第一个'\0'就结束。而字符数组包含字符中所有的元素,不会识别'\0'。
6. 小结
- C语言中通过字符数组模拟字符串;
- C语言中的字符串使用'\0'作为结束符;
- 字符串字面量的本质为字符数组;
- 字符串相关函数都依赖于结束符'\0'.
声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!