可以在C中将单个字符设为只读吗? (我想将'\ 0'设为只读以避免缓冲区溢出。)
char var[5 + 1] = "Hello";
var[5] = '\0'; // specify this char as read-only ?
答案 0 :(得分:4)
您不能制作混合const
/非 - const
数组或字符串。 \0
未被覆盖应由程序中的不变量保证。
答案 1 :(得分:1)
不能这样做,你必须通过适当的练习来确保这一点。
答案 2 :(得分:1)
答案 3 :(得分:0)
不,C中根本不存在只读存储器位置的概念。在分配/访问/操作存储器时,程序员独立存在并且假定他们知道他们在做什么:D。这就是原始力量产生的责任:D。
如果你可以切换到C ++,那么你可以考虑使用std :: vector。虽然使用std :: vectors仍然可以进行缓冲区溢出,但在使用类接口中包含的方法时它们的可能性较小。此方法抽象元素访问和插入,因此您不需要显式管理内存。请注意,如果不使用迭代器,仍可以直接访问向量大小之外的元素。
由于溢出是c / c ++中反复出现的问题,因此有几种工具可以帮助程序员解决这些错误。工具范围从静态语言分析器到调试模式下不受保护的内存访问的运行时检测。
答案 4 :(得分:0)
使用跟踪const char * ptr
\0
的{{1}}。