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

GCC中printf八进制转义字符解析疑问:为何\1011输出A1?

问题描述

给出如下C代码:

#include <stdio.h>

int main()
{
    printf("\101\102\103\104\105\12");
    return 0;
}

在GCC编译器中执行后,输出结果为ABCDE。但将printf的参数改为"\1011\102\103\104\105\12"时,输出结果变为A1BCDE,请问该现象的原因是什么?

原因解析

这是由C语言中八进制转义字符的解析规则导致的:

  • 八进制转义序列以反斜杠\开头,后续可跟随1到3个八进制数字(即0-7范围内的字符)。
  • 编译器解析时,会从\开始尽可能多地读取连续的八进制数字,但最多读取3位;如果遇到非八进制数字,会立即停止当前转义序列的解析,剩余字符按普通文本处理。

在修改后的字符串"\1011\102..."中:

  1. 开头的\1011被拆分为两部分处理:
    • 前三位101是合法八进制数字,对应十进制65,即ASCII字符A;
    • 第四个字符1属于普通字符,直接输出;
  2. 后续的\102、\103等仍按正常八进制转义规则解析,分别对应B、C等字符。

最终拼接输出结果就是A1BCDE。

内容的提问来源于stack exchange,提问作者Baranitharan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:10:09