c - 有没有办法(实际上)保护对象不被修改?

标签 c

如果试图修改声明为 const 的对象,const 类型限定符会导致编译器发出错误消息,但这还不够保护。例如以下程序修改声明为 const 的数组的两个元素:

#include <stdio.h>

int main(void)
{
    const char buf[2] = { 'a','b' };
    const char *const ptr = buf;
    unsigned long addr = (unsigned long)ptr;

    *(char *)addr = 'c';
    addr = addr + 1;
    *(char *)addr = 'd';

    printf("%c\n", buf[0]);
    printf("%c\n", buf[1]);
    return 0;
}

所以,事实证明是编译器没有足够的保护来保护对象不被修改。我们怎样才能防止这种事情发生呢?

最佳答案

我认为不能也不应该提供更多保护。

C 编程语言几乎可以让您自由地做任何您想做的事情,尤其是从指针访问对象。然而,自由从来都不是免费的,因此 C 程序员必须始终小心(如果没有必要,请避免转换)。

关于c - 有没有办法(实际上)保护对象不被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574791/

相关文章:

与 C 中的指针和虚拟内存混淆

检查一个数字是否包含一对都是质数的组合

c - fork() 作为参数

c - 为什么在 vulkan.h 中,不可分派(dispatch)的对象总是类型定义为 64 位?

c - 未请求分配的内存

c - 如何让 scanf_s() 在我的 C 程序中正常工作?

c - C 中 rand() 函数的行为差异

c - Mingw-w64 上 C 中止函数的奇怪行为

iphone - 我如何从 iOS 框架中删除或重命名符号?

c - 如何从打开的句柄中获取目录名称/路径