当前位置: 首页 > web >正文

C语言教程(十六): C 语言字符串详解

一、字符串的表示

        在C语言中,字符串是由一系列字符组成,并且以空字符 `'\0'` 作为结束标志。字符串通常用字符数组来表示。例如:

char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};也可以使用字符串字面量来初始化字符数组:char str[] = "Hello";编译器会自动在字符串字面量的末尾添加 `'\0'`

二、字符串的初始化

   2.1 字符数组初始化

        可以在定义字符数组时进行初始化,如上面的例子所示。还可以指定数组的大小:char str[10] = "Hello";若指定的数组大小小于字符串字面量的长度(包含 `'\0'`),会导致编译错误。

  2.2 指针初始化

        除了使用字符数组,还可以用指针指向字符串字面量:const char *str = "Hello";这里的 `str` 是一个指向字符串常量的指针。要注意,字符串常量存储在只读内存区域,不能修改其内容。

三、字符串操作函数

        C语言标准库提供了许多用于操作字符串的函数,这些函数定义在 `<string.h>` 头文件中。

  3.1 `strlen` 函数

        `strlen` 函数用于计算字符串的长度,不包含结束符 `'\0'`。示例如下:

#include <stdio.h>
#include <string.h>int main() {char str[] = "Hello";size_t len = strlen(str);printf("字符串长度: %zu\n", len);return 0;
}

  3.2 `strcpy` 函数

        `strcpy` 函数用于将一个字符串复制到另一个字符数组中。示例如下:

#include <stdio.h>
#include <string.h>int main() {char src[] = "Hello";char dest[10];strcpy(dest, src);printf("复制后的字符串: %s\n", dest);return 0;
}

        要注意,目标数组的大小必须足够大,以容纳源字符串(包含 `'\0'`),否则会导致缓冲区溢出。

3.3 `strcat` 函数

        `strcat` 函数用于将一个字符串追加到另一个字符串的末尾。示例如下:

#include <stdio.h>
#include <string.h>int main() {char str1[20] = "Hello";char str2[] = " World";strcat(str1, str2);printf("拼接后的字符串: %s\n", str1);return 0;
}

  3.4 `strcmp` 函数

        `strcmp` 函数用于比较两个字符串。如果两个字符串相等,返回 0;如果第一个字符串小于第二个字符串,返回一个负数;如果第一个字符串大于第二个字符串,返回一个正数。示例如下

#include <stdio.h>
#include <string.h>int main() {char str1[] = "Hello";char str2[] = "Hello";int result = strcmp(str1, str2);if (result == 0) {printf("两个字符串相等\n");} else {printf("两个字符串不相等\n");}return 0;
}

四、字符串的输入输出

   4.1 输出

        使用 `printf` 函数输出字符串,格式控制符为 `%s`。示例如下:

#include <stdio.h>int main() {char str[] = "Hello";printf("%s\n", str);return 0;
}

   4.2 输入

        `scanf` 函数:使用 `scanf` 函数输入字符串,格式控制符为 `%s`。但 `scanf` 遇到空格会停止读取。示例如下:

#include <stdio.h>int main() {char str[100];scanf("%s", str);printf("你输入的字符串是: %s\n", str);return 0;
}

        `fgets` 函数:`fgets` 函数可以读取包含空格的字符串,它会读取一行输入,直到遇到换行符或达到指定的最大长度。示例如下:

#include <stdio.h>int main() {char str[100];fgets(str, sizeof(str), stdin);printf("你输入的字符串是: %s\n", str);return 0;
}

五、注意事项

  5.1 缓冲区溢出

        在使用 `strcpy`、`strcat` 等函数时,要确保目标数组有足够的空间来存储字符串,否则会导致缓冲区溢出,可能引发安全问题。

  5.2 字符串常量

        使用指针指向字符串常量时,不能修改字符串的内容,因为字符串常量存储在只读内存区域。如果需要修改字符串,应该使用字符数组。

  5.3 字符串结束符

        处理字符串时,要确保字符串以 `'\0'` 结尾,否则在使用字符串操作函数时可能会出现未定义行为。

http://www.xdnf.cn/news/1630.html

相关文章:

  • TCP基础题:音乐播放列表管理系统
  • React-组件和props
  • 2025五一杯数学建模竞赛思路助攻预定
  • 光影编程师:Threejs Shader 基础全攻略
  • 跟着deepseek学golang--认识golang
  • 《CBOW 词向量转化实战:让自然语言处理 “读懂” 文字背后的含义》
  • 常见的 Spring Boot 注解汇总
  • LVDS系列9:Xilinx 7系可编程输入延迟(二)
  • 32单片机——外部中断
  • 阿里云99机器总是宕机,实测还是磁盘性能差
  • 儿童语义认知功能磁共振成像研究的元分析
  • 迅为RK3568开发板内核模块实现-编写 Makefile
  • MongoDB Compass可视化工具
  • [MERN 项目实战] MERN Multi-Vendor 电商平台开发笔记(v2.0 从 bug 到结构优化的工程记录)
  • 仓库体系结构风格-笔记
  • PowerBI企业运营分析——全动态帕累托分析
  • 2025年3月AGI技术月评|技术突破重构数字世界底层逻辑
  • 【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
  • git tag使用场景和实践
  • Excel处理控件Spire.XLS系列教程:Java设置Excel活动工作表或活动单元格
  • “平价”微智码初尝试
  • pycharm2024.3.2项目解释器选择问题
  • Hadoop基础知识
  • verilog和system verilog常用数据类型以及常量汇总
  • Netty线上如何做性能调优?
  • 远程访问服务器的Jupyter Notebook
  • Vue3 setup、计算属性、侦听器、响应式API
  • MCP协议最新进展分析报告
  • 【Vue】TypeScript与Vue3集成
  • CSS简单实用的加载动画、骨架屏有效果图