[英]can someone explain me why when a “string” is used with the “%d” fromat specifier it gives strange output
這是程序:
#include <stdio.h>
main()
{
printf("%d", "A"); // Can i know what the output from "printf" even means why the output is so strange
} // this outputs: "4214884" in my compiler
如您所見,output 太奇怪了,你們中的任何人都可以向我解釋一下。 這是未定義的行為嗎? 這種行為在C 標准中的任何地方都有描述,所以我可以閱讀它
是的,這是未定義的行為。 %d
期望參數是 integer,這里你傳遞的是字符串文字的第一個元素的地址,它是一個指針類型。
根據C11
,第 7.21.6.1/P9 章
[...]如果任何參數不是相應轉換規范的正確類型,則行為未定義。
也就是說,對於托管環境, main()
應該是int main(void)
。
如果要打印帶有%d
說明符的字符,請在字符周圍加上單引號,而不是雙引號。
printf("%d", 'A');
這將打印 65,即 A 的 ASCII 值。
如果您在雙引號中放入任何將被解釋為string literal
的內容。 所以,它有兩個字符(在你的情況下),一個是'A'
,第二個是'\0'
字符,你用%d
說明符打印它,這將完全產生undefined behaviour
。 這將在不同的編譯器和 IDE 上顯示不同的結果。
如果要打印"A"
,我的意思是使用雙引號,請改用%s
標識符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.