什么是字符串
字符串是指一组字符的集合,与字符数组不同的是,字符数组强调的是存储结构而字符串强调的是存储内容。
C语言没有专门定义字符串数据类型(如其他语言中的string),它用以‘\0‘结尾的字符数组来表示一个逻辑意义上的字符串
字符串的初始化
- C语言中的字符串是以’\0’结束的字符数组
- C语言中的字符串常量区
char str[11] = "I am happy"; // 用数组的形式修改定义的字符串值char str[] = "I am happy"; // 自动分配内存空间char *p = "I am happy"; // 指针方式
字符串是由一对双引号括起的字符序列。
例如: “CHINA” , “C program” , “$12.5”等都是合法的字符串。
字符串和字符不同,它们之间主要有以下区别:
- 字符由单引号括起来,字符串由双引号括起来。
- 字符只能是单个字符,字符串则可以含一个或多个字符。
- 可以把一个字符型数据赋予一个字符变量,但不能把一个字符串赋予一个字符变量。在C语言中没有相应的字符串变量,也就是说不存在这样的关键字,将一个变量声明为字符串。但是可以用一个字符数组来存放一个字符串,这将在数组一章内予以介绍。
- 字符占一个字节的内存空间。字符串占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符”\0” (ASCII码为0)。这是字符串结束的标志。
例如,字符串 “C program” 在内存中所占的字节为:
| C | p | r | o | g | r | a | m | \0 | |
|---|---|---|---|---|---|---|---|---|---|
char c = 'a'char s[] = "a"
字符’a’ 和 字符串”a”,虽然都只有一个字符,但在内存中的情况是不同的。
‘a’在内存中占一个字节,可表示为:
| a |
|---|
“a”在内存中占二个字节,可表示为:
| a | \0 |
|---|---|
int main() {compare();char num[] = "1234567";printf("%p\n", num);/* char num[] = "1234567" 内存存储内存地址 ASCII值 字符0x004DF810 +49 10x004DF811 +50 20x004DF812 +51 30x004DF813 +52 40x004DF814 +53 50x004DF815 +54 60x004DF816 +55 70x004DF817 +0 .*/system("pause");return 0;}
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | \0 |
|---|---|---|---|---|---|---|---|
| 004DF810 | 004DF811 | 004DF812 | 004DF813 | 004DF814 | 004DF815 | 004DF816 | 004DF817 |
| 49 | 50 | 51 | 52 | 53 | 54 | 55 | 0 |
“012345678” 对应的ASCII值是48-57
#include <stdio.h>int main () {char *p = "hello world";printf("%s\n", p);// p = 004053B0 hello world"=004053B0printf("p = %p, \"hello world\"=%p\n", p, "hello world");// char name[100] = "china"; //用数组的形式修改定义的字符串值char name[] = "china"; // 这样会自动分配内存空间name[0] = 'C';printf("%c\n", name[0]); //Cprintf("%c\n", "china"[0]); //c 常量区不会改变printf("%s\n", name); //Chinareturn 0;}
