c++ - 带有 const int* const 的 scanf 有效,但不应该

标签 c++ constants scanf

我的代码相当于以下内容:

const int* const n = new int;
printf("input: ");
scanf("%d", n);
delete n;

现在,由于 n 是一个指向 CONSTANT 整数的指针,这应该不起作用(我期待编译器错误)。但是,这似乎可以正常工作,甚至将输入的值存储到 *n 中。

我想知道,为什么这不会给我一个错误;为什么它起作用? scanf 不应该不能改变 *n 的值吗?

最佳答案

scanf 的原型(prototype)是:

int scanf ( const char * format, ... );

省略号表示它接受可变参数。 C(和 C++)没有办法检查这些参数的有效性。这就是为什么如果你在这里传递一个 double 的地址,甚至是 double 变量本身,你就不会出错。由程序员来验证是否传递了正确的参数。

关于c++ - 带有 const int* const 的 scanf 有效,但不应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369534/

相关文章:

c++ - mmap() 后出现段错误

c++ - 如何防止在 std header (在 Xcode 中)内发生编译错误?

C++ 复制构造函数签名 : does it matter

c - 在 C 中使用 sscanf 检测字符串中的空字符

c# - 导出可运行的应用程序

javascript - 常量在服务中未定义,但在另一个服务中有效

c - 将 const char * 传递给 C 中的函数

C: 忽略 scanf 的返回值

c - scanf() 将换行符留在缓冲区中

C# 应用程序抛出 system.BadImageFormat 异常。在 x64 中编译的依赖项