如何正确使用C语言字符串?请求解答代码运行相关问题
C语言字符串使用问题解答
代码核心问题分析
- 多字符常量错误:
'A+'属于多字符常量,C语言规定单个字符常量只能包含一个字符,这种写法属于未定义行为,实际存储值由编译器决定,无法得到预期的"A+"字符序列。 - 缺失字符串终止符:C语言字符串必须以
'\0'(空字符)结尾,printf("%s", ...)会从指定地址开始读取字节,直到遇到'\0'才停止。你的数组未添加该终止符,会导致printf读取超出数组范围的内存,出现乱码或程序崩溃。
修正后的代码示例
如果要存储"A+"和"A"两个字符串,推荐两种正确写法:
方式1:二维字符数组
#include <stdio.h> #include <stdlib.h> #pragma warning(disable:4996) int main() { char strings[][3] = {"A+", "A"}; // 每个字符串自动补'\0',[3]适配"A+"的2个字符+1个终止符 printf("%s\n", strings[0]); printf("%s\n", strings[1]); return 0; }
方式2:字符指针数组
#include <stdio.h> #include <stdlib.h> #pragma warning(disable:4996) int main() { char *strings[] = {"A+", "A"}; // 字符串字面量默认自带'\0' printf("%s\n", strings[0]); printf("%s\n", strings[1]); return 0; }
单个字符串的正确初始化示例
若仅定义单个字符串(如"A+"),正确写法如下:
char str[] = "A+";// 自动添加'\0',数组长度为3('A'、'+'、'\0')char str[3] = {'A', '+', '\0'};// 显式指定终止符- 错误写法:
char str[] = {'A', '+'};// 无终止符,不能用%s输出
关键知识点总结
- C语言无原生字符串类型,字符串通过以'\0'结尾的字符数组实现。
- 使用
%s格式符输出时,必须保证传入地址指向的字符序列以'\0'结尾,否则触发未定义行为。 - 多字符常量(如
'A+')不符合C规范,应绝对避免。
内容的提问来源于stack exchange,提问作者Adrian Ng
相关产品推荐
相关产品推荐

