16-c语言字符串常量
本文最后更新于 2026-02-27,文章内容可能已经过时。
C语言字符串常量是用双引号(
" ")定义的字符序列,存储时自动在末尾添加\0结束符,因此长度为实际字符数+1;它们存储在只读内存区(如RODATA),不可修改(尝试修改会导致未定义行为),与单引号表示的字符常量(长度恒为1)不同,字符串常量可正确用于初始化字符数组(如char s[] = "hello";)或赋值给字符指针(如char *p = "hello";),但不能直接赋值给字符数组变量(如char arr[5]; arr = "hello";会报错)。
定义
字符串常量是用双引号(" ")括起来的0个或多个字符组成的序列。例如:
"Hello, World!""a"" "(空格字符串)""(空字符串)
存储方式
- 字符串常量在内存中以字符数组形式存储
- 系统会在字符串末尾自动添加一个
'\0'(空字符)作为字符串结束标志 - 字符个数为n的字符串在内存中占(n+1)个字节
与字符常量的区别
| 特性 | 字符常量 | 字符串常量 |
|---|---|---|
| 定界符 | 单引号 ' | 双引号 " |
| 长度 | 1个字符 | n+1个字符(n为字符个数) |
| 存储 | 存储字符的ASCII码值 | 存储字符及结尾的'\0' |
| 示例 | 'A' | "A"(长度为2) |
重要特性
1. 不可修改性
- 字符串常量在定义后不可修改
- 它们存储在只读内存区(RODATA)
- 尝试修改字符串常量会导致程序崩溃或未定义行为
2. 与字符数组的关系
- 正确方式:
char str[] = "hello";(数组初始化) - 错误方式:
char str[6]; str = "hello";(不能直接赋值字符串常量给数组)
3. 与指针的关系
- 字符串常量会生成"指向字符的常量指针"
- 可以将字符串常量赋值给字符指针:
char *p = "hello"; - 但不能将字符串常量赋值给字符数组:
char arr[5]; arr = "hello";(会报错)
常见用法示例
1. 字符串输出
#include <stdio.h>
int main() {
printf("Hello, World!\n"); // 输出字符串
printf("Hello\nWorld"); // \n表示换行
return 0;
}
2. 字符串处理函数(需包含string.h)
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = "World";
// 字符串连接
strcat(str1, " "); // str1现在为"Hello "
strcat(str1, str2); // str1现在为"Hello World"
// 字符串比较
if(strcmp(str1, "Hello World") == 0) {
printf("Strings are equal\n");
}
// 获取字符串长度(不包括'\0')
printf("Length: %d\n", strlen(str1)); // 输出 11
return 0;
}
3. 字符串常量的转义字符
#include <stdio.h>
int main() {
printf("Hello\tWorld\n"); // \t表示制表符
printf("Line1\nLine2\n"); // \n表示换行
printf("This is a \"quote\".\n"); // \"表示双引号
return 0;
}
重要注意事项
-
字符串常量长度:字符串
"F"在内存中存储为'F'和'\0',长度为2,不是1。 -
空字符串:
""表示空字符串,长度为0,但内存中仍包含一个'\0'。 -
字符串与字符数组的初始化:
char s1[] = "hello"; // 自动分配6个字节 char s2[6] = "hello"; // 显式分配6个字节 char s3[5] = "hello"; // 错误,长度不足 -
字符串常量的指针赋值:
char *str = "Hello"; // 正确,str指向字符串常量 str[0] = 'h'; // 错误!尝试修改字符串常量
字符串常量是C语言中处理文本信息的基础,正确理解其特性和用法对编写可靠的C程序至关重要。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

