gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:12:46 30 4
gpt4 key购买 nike

如果试图修改声明为 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com