为什么printf(“%d”)没有可变的原因在c?

问题描述 投票:0回答:1

我错误地编写了此代码:

#include <stdio.h>

int main() {
    printf("%d");  // Missing argument!
    return 0;
}

令人难以置信的是,它已经编译(存在警告),但是当我运行时,我会出乎意料的输出,有时甚至是崩溃

  • 为什么尽管缺少论点,但为什么成功地编译?
    没有相应的整数执行时会发生什么?
    
  • 1。
printf("%d")
c printf undefined-behavior compiler-warnings format-string
1个回答
0
投票

printf("%d")
采用格式字符串来解释其他参数。由于printf

期望一个整数,但没有提供一个整数,因此仍然试图从堆栈(或寄存器)中获取一个参数,从而导致了

未定义的行为

(ub)。
2。为什么要编译?
C未在编译时检查传递给
printf
的参数数(除非启用警告)。 3。运行时会发生什么?

由于期望一个整数,但会获取随机数据,输出是垃圾或可能导致分段故障。

如何解决:

提供正确的论点:

%d 启用编译器警告要捕获此类错误:

printf

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.