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

輸出:C中的無效轉義序列如何表現?

(第一行不打印) 那麼,什麼是被轉義序列做了什麼?如果它在\之後沒有讀取%,則不應該在第二個printf語句中打印10。

+1

字符'%'的正確轉義序列是'%%'。 – TypeIA

+0

[你如何在C中顯示「%5d」?](http://stackoverflow.com/questions/4772598/how-do-you-display-5d-in-c) – devnull

+1

@dvnrrs'%% '不是一個轉義序列,它是一個_conversion說明符,對於printf函數族來說是唯一的。不同於所有C字符串通用的轉義序列(如'\ n')。 – Lundin

回答

3

\%不是有效的轉義序列。你的編譯器應該拋出一個警告,像

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

您需要%%以其他方式打印%它可能會或可能無法打印。

+0

它可能會或可能不會被打印。 –

+0

@RagingScallion;呃...我不知道。 – haccks

+2

[Now you do](http://coliru.stacked-crooked.com/a/be25f263a508785a) –

3

有處理這裏的兩個層次:

  1. 字符串文字的解析。這是\生效的地方。 \n被換行符替換,其他轉義也發生。

  2. printf()機制。這個只處理%作爲特殊字符,並解析它後面的任何內容以便格式化它的一個參數。

隨着\%你混用這兩個,在\(如果%被抑制或不)無論發生什麼事,(2)不會注意到\,因爲它是「吃掉」(1)。

相關問題