C 字符串

C语言字符串知识点汇总

C语言字符串知识点汇总

适合编程小白的详细讲解,用大白话解释字符串相关概念和操作

1

字符串的本质

在C语言中,字符串就是一串字符(比如”Hello”),但实际上是以字符数组的形式存储的。

每个字符串都以一个特殊字符’\0’(空字符)结尾,值为0,表示字符串结束。

大白话解释: 想象字符串就像一列火车,每个字符是一节车厢,最后的’\0’就是车尾标志,告诉你列车结束了。

// 字符串在内存中的存储示例
char str[] = “Hello”;

// 实际存储内容:
// [H] [e] [l] [l] [o] [\0]
2

字符串的创建

C语言中有两种创建字符串的方式:

1. 字符数组: 固定大小,内容可以修改

char str1[20] = “Hello”; // 长度20
char str2[] = “World”; // 自动计算长度

2. 字符串指针: 指向字符串字面量,内容不可修改

char *str3 = “Hello”; // 字符串字面量

重要区别: 字符数组方式创建的字符串可以修改内容,而字符串指针方式创建的是常量,不能修改!

3

字符串输入输出

输出字符串:

printf(“%s”, str); // 基本输出
puts(str); // 输出后自动换行

输入字符串:

// 安全的方式 – 指定最大长度
char name[50];
fgets(name, sizeof(name), stdin);

避免使用: gets()函数不安全,容易导致缓冲区溢出,已被弃用!

4

常用字符串函数

C标准库提供了一系列处理字符串的函数,都在 <string.h> 头文件中。

strlen() – 字符串长度

计算字符串实际长度(不含’\0’)

int len = strlen(“Hello”); // 返回5

strcpy() – 字符串复制

将源字符串复制到目标字符串

char dest[20];
strcpy(dest, “Hello”);

strcat() – 字符串连接

将源字符串附加到目标字符串末尾

char str[20] = “Hello”;
strcat(str, ” World!”); // 结果:”Hello World!”

strcmp() – 字符串比较

比较两个字符串内容是否相同

int result = strcmp(“apple”, “apple”); // 返回0表示相等
5

字符串与指针

字符串和指针紧密相关,理解指针对处理字符串很重要:

1. 字符串名是指向首字符的指针:

char str[] = “Hello”;
char *p = str; // p指向第一个字符’H’

2. 通过指针遍历字符串:

char *p = “Hello”;
while (*p != ‘\0’) {
  printf(“%c”, *p);
  p++; // 移动到下一个字符
}

大白话: 指针就像一个导游,带着你在字符串中逐个访问每个字符。

6

常见错误

处理字符串时常见的坑:

1. 忘记预留’\0’的空间:
char str[5] = "Hello"; // 错误!缺少空间存放’\0′

2. 修改字符串常量:
char *p = "Hello"; p[0] = 'h'; // 错误!字符串常量不可修改

3. 字符串比较用 ==:
if (str1 == str2) // 错误!比较的是地址而不是内容

4. 缓冲区溢出:
写入超过分配空间的数据,导致程序崩溃或安全漏洞

安全提示: 使用strncpy(), strncat()等带长度限制的安全函数

© 2023 C语言字符串学习指南 | 编程小白专属 | 记得在实际编程中多多练习!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部