簡體   English   中英

有人能解釋一下為什么當“字符串”與“%d” fromat 說明符一起使用時,它會給出奇怪的 output

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM