C语言---字符串

文章目录

在C语言中,字符串(String) 实际上并不是一种独立的基本数据类型,而是由一系列 字符(char) 组成的 字符数组,并以空字符 \0 作为结束标志。

1、字符串的定义与初始化

在C语言中,有两种主要方式来定义字符串:

1.1、字符数组

这是最常见的定义方式。编译器会自动在末尾加上 \0。

bash 复制代码
char str1[] = "Hello";          // 自动根据内容分配空间(6个字节)
char str2[10] = "Hello";        // 手动指定大小,剩余位自动补 \0
char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 手动逐字符初始化

1.2、字符串常量(指针方式)

使用指针指向一个存放在只读数据区的字符串。

bash 复制代码
char *str4 = "Hello";

注意:通过这种方式定义的字符串通常是只读的,修改它的内容可能会导致程序崩溃。

2. 核心特征:结束标志 \0

作用:C语言不记录字符串的长度,只靠 \0 来判断字符串在哪里结束。

内存占用:字符串 "Hi" 包含 2 个可见字符,但实际在内存中占用 3 个字节的空间('H', 'i', '\0')。

3. 常用字符串处理函数

C语言在标准库 <string.h> 中提供了一系列处理字符串的函数:

函数名 功能 说明
strlen(s) 返回字符串长度 不包含 末尾的 \0
strcpy(s1, s2) 复制字符串 将 s2 复制到 s1(注意 s1 空间需足够大)
strcat(s1, s2) 拼接字符串 将 s2 接到 s1 的后面
strcmp(s1, s2) 比较字符串 相等返回 0,不等返回非 0(基于 ASCII 码)
strstr(s1, s2) 查找子串 在 s1 中查找 s2 首次出现的位置

4. 字符串的输入与输出

(1) 输出

printf("%s", str); :最常用的格式化输出。

puts(str); :输出并在末尾自动添加换行符。

(2) 输入

scanf("%s", str); :不推荐。遇到空格、回车或制表符会停止读取,且容易溢出。

fgets(str, size, stdin); :推荐。可以指定读取长度,防止缓冲区溢出,且能读取空格。

bash 复制代码
char name[20];
printf("请输入姓名: ");
fgets(name, sizeof(name), stdin); // 安全读取一行
相关推荐
骇客野人5 分钟前
Java BIO / NIO / AIO 完整详解 + 编程技巧
java·开发语言·nio
霸道流氓气质8 分钟前
OpenTelemetry 入门与实战:Java Agent、Spring Boot Starter与LLM调用追踪示例
java·开发语言·spring boot
m0_5873830014 分钟前
24 小时自助健身房系统软件开发实战指南与案例解析
java·spring boot·spring·系统架构·需求分析
栖凤20 分钟前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
小师兄吃牛肉20 分钟前
Java 同步系列之 ZooKeeper 分布式锁
java·分布式·java-zookeeper
聪明蛋子哟22 分钟前
不仅仅是向量检索:结合知识图谱与Tool Calling的混合增强生成(Hybrid RAG)方案
人工智能·算法·知识图谱
Pniubi22 分钟前
力扣55跳跃游戏(贪心)
算法·leetcode·游戏
马剑威(威哥爱编程)33 分钟前
【AI全栈后端12-12】Spring Boot 3.x 到 4.x 迁移实操:Jakarta 11、Jackson 3 与 AI 2.0
java·开发语言·spring boot·后端
Gauss松鼠会35 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
IT研究室41 分钟前
最新计算机毕业设计选题推荐-基于spring boot的心桥·心理健康综合服务平台-网站-文档指导-Java-springboot
java·spring boot·课程设计