- 字符串的声明和定义
- 字符串是以空字符(\0)结尾的char类型数组,如果没有空字符(\0),那么就是字符数组而不是字符串。
- 利用数组和指针形式创建字符串
| #include <stdio.h> |
| int main() |
| { |
| char words_1[30] = "\"Run! Forrest, run!\""; |
| const char *words_2 = "Nice to meet you!"; |
| |
| printf("%s\n", words_1); |
| printf("%s\n", words_2); |
| return 0; |
| } |
- 如果字符串字面量之间没有间隔,或者用空白字符分隔,C语言会将其视为串联起来的字符串字面量,例如
| #include <stdio.h> |
| int main() |
| { |
| |
| char words[100] = "Hello," "nice to meet you!"; |
| printf("%s", words); |
| return 0; |
| } |
| #include <stdio.h> |
| int main() |
| { |
| char words[100] = "\"Run! Forrest, run!\""; |
| printf("%s", words); |
| return 0; |
| } |
- 字符串储存在静态存储区,程序运行时才会为数组分配内存
| #include <stdio.h> |
| #define MSG "I'm special" |
| |
| int main() |
| { |
| char string[20] = MSG; |
| const char* pt = MSG; |
| printf("%p\n", string); |
| printf("%p\n", pt); |
| printf("%p\n", "I'm special"); |
| } |
在大多数现代C编译器(如GCC、Clang等)和操作系统(如Linux)中,字符串常量通常被存储在.rodata
(Read-Only Data)段中。.rodata
段是程序的只读数据段,专门用于存放程序中定义的只读数据,包括字符串常量、全局常量等。
.rodata
不等同于.data
段,位置在text和data段之间,靠近text段: text---.rodata---.data---.bss

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY