#include<stdio.h>
int main() {
int d = -8623;
printf("|%6D|", d);
return 0;
}
我用我的电脑并è¿è¡Œå®ƒï¼Œç»“果是:|D|
ï¼Œä½†æ ‡å‡†ç”案是:|%6D|
,与在线IDE相åŒã€‚
ç”案 0 :(得分:1)
替æ¢
printf("|%6D|", d);
使用
printf("|%d|", d);
%d
是带符å·æ•´æ•°çš„æ£ç¡®æ ¼å¼ã€‚本地PC和在线IDEçš„ç”案有所ä¸åŒï¼Œå› 为您调用了未定义的行为。
ç”案 1 :(得分:0)
printf
çš„è°ƒç”¨å…·æœ‰æœªå®šä¹‰çš„è¡Œä¸ºï¼Œå› ä¸ºä½¿ç”¨äº†é”™è¯¯çš„æ ¼å¼è¯´æ˜Žç¬¦ã€‚
è¦èŽ·å¾—“预期结果â€ï¼Œæ‚¨è‡³å°‘应该写出
printf("|%%6D|", d);
å°½ç®¡ç¼–è¯‘å™¨ä¼šæŠ¥å‘Šé”™è¯¯ï¼Œå› ä¸ºåœ¨å‡½æ•°è°ƒç”¨ä¸æœ‰æœªä½¿ç”¨çš„å‚æ•°d
。
ç”案 2 :(得分:0)
 Â为什么这段代ç ä¸çš„结果ä¸ä¸€æ ·ï¼Ÿ
在C standardä¸æ述了用C编写的程åºåœ¨ç¼–译和执行åŽçš„行为。
我们å¯ä»¥è‡ªç”±è®¿é—®çš„æ ‡å‡†è‰æ¡ˆåœ¨C11 7.21.6.1p6ä¸æŒ‡å‡ºï¼Œå¦‚æžœprintf
转æ¢è§„èŒƒæ— æ•ˆï¼Œåˆ™â€œè¡Œä¸ºæœªå®šä¹‰â€ã€‚ %D
æ˜¯æ— æ•ˆçš„è½¬åŒ–-(f)printf
descriptionä¸æ²¡æœ‰åˆ—出D
转化说明符。
未定义行为一è¯çš„定义如C11 3.4.3p1:
 Â使用éžä¾¿æºå¼æˆ–错误程åºæž„é€ æˆ–é”™è¯¯æ•°æ®æ—¶çš„è¡Œä¸ºï¼Œè€Œæœ¬å›½é™…æ ‡å‡†å¯¹æ¤ä¸æ–½åŠ 任何è¦æ±‚
您æ供的代ç 没有è¦æ±‚。它å¯ä»¥ä»¥ä»»ä½•æ–¹å¼è¡¨çŽ°ï¼Œä½†æ˜¯å¯ä»¥æ ¹æ®éœ€è¦-打å°ä»»ä½•å†…容,开始第三次世界大战或spawn dragons。 in this stackoverflow threadå¯ä»¥æ‰¾åˆ°æ›´å¤šæœ‰å…³æœªå®šä¹‰è¡Œä¸ºçš„ä¿¡æ¯ã€‚
如果程åºä¸çš„行为未定义,则å¯èƒ½å‘ç”Ÿä»»ä½•äº‹æƒ…ï¼Œå¹¶ä¸”æ²¡æœ‰â€œæ ‡å‡†ç”案â€ã€‚执行的结果是ä¸å¯é¢„测的,并且会éšçŽ¯å¢ƒï¼Œç¼–译器或编译器版本而å˜åŒ–。奇怪的是,ä¸åŒçš„环境对于具有未定义行为的代ç 的行为也会有所ä¸åŒã€‚
您看到的差异æ¥è‡ªåœ¨æ‚¨æµ‹è¯•çš„ä¸åŒå¹³å°ä¸Šå®žæ–½printf
的差异。您的本地printf
实现与您å°è¯•è¿‡çš„“在线IDEâ€ä¸çš„printf
实现ä¸åŒï¼Œè¿™å°±æ˜¯ä¸ºä»€ä¹ˆæ‚¨èŽ·å¾—ä¸åŒç»“æžœçš„åŽŸå› ã€‚