You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:41:30