无效的转义序列在C中的表现如何?

时间:2014-03-19 13:56:18

标签: c

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main(void)
{
    printf("\%\n");
    int x = 10;
    printf("\%d\n", x);
        return 0;
}

输出:

10

(第一行不打印) 那么逃脱序列正在做什么呢?如果它在\之后没有读取%,则它不应该在第二个printf语句中打印10。

2 个答案:

答案 0 :(得分:3)

\%不是有效的转义序列。您的编译器应该发出类似

的警告
[Warning] unknown escape sequence: '\%' [enabled by default]  

您需要%%才能打印%,否则可能会打印或不打印。

答案 1 :(得分:3)

这里有两个级别的处理:

  1. 解析字符串文字。这是\生效的地方。 \n被换行符替换,其他转义也会发生。

  2. printf()机制。这个只处理%作为特殊字符,并解析后面的任何内容,以格式化其中一个参数。

  3. 使用\%混合这两个,无论\上发生什么(如果%被抑制),(2)都不会注意到\因为它被(1)“吃掉”了。