一、基本概念

  1. 字符串是位于双引号中的字符序列

    char s[] = "...";
    

    C语言中没有原生字符串类型,本质上是以空字符"\0"结尾的字符数组

  2. 在内存中以"\0"结束,所占字节比实际多一个 例如字符串"HELLO"在内存中的存储方式:

    | H | E | L | L | O | \0 |

二、字符串的初始化

  1. 法1:字符串字面量

    简单来说就是直接写在代码里、用双引号包起来的固定文本

    char name[10] = "Hello";
    // 或者让编译器自动计算长度:
    char greeting[] = "Hello";
    
  2. 法2:逐个字符赋值

    char name[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    

三、内存模型

char str[6] = "Hello"; 为例,它在内存中的样子是这样的:

数组下标str[0]str[1]str[2]str[3]str[4]str[5]
存储内容Hello\0
ASCII码721011081081110

四、常用操作与坑点

  1. 输入与输出 使用 %s 格式化占位符输出

    char msg[20];
    printf("请输入你的名字: ");
    scanf("%s", msg); // msg 本身就是地址,不需要加 &
    printf("你好, %s!\n", msg);
    
  2. 修改数组中的单个字符 通过下标直接访问

    char str[] = "Hello";
    str[0] = 'h'; // 把 'H' 改成 'h'
    printf("%s", str); // 输出 "hello"
    
  3. 常见误区:不能直接用 = 赋值

    char str[10];
    str = "Hello"; // 错误,编译会报错
    

    正确做法:使用 string.h 库中的 strcpy 函数

    #include <string.h>
    strcpy(str, "Hello");
    
  4. 字符串处理常用库函数 <string.h> 处理 C 语言字符数组时,通常会引入 <string.h> 头文件:

    函数功能示例
    strlen(str)计算字符串真实长度(不含 ‘\0’)strlen("Hello") 结果为 5
    strcpy(dest, src)把 src 复制到 deststrcpy(a, b);
    strcat(dest, src)把 src 拼接在 dest 后面strcat(a, b);
    strcmp(str1, str2)比较两个字符串(相同返回 0)strcmp(a, b) == 0