Tag: 数据处理

阅读未初始化的内存空间总是不明智吗?

我正在重新创建整个标准C库,我正在为strle n实现一个我希望成为所有其他str函数的基础。 我目前的实施如下: int ft_strlen(char const *str) { int length; length = 0; while(str[length] != ‘\0’ || str[length + 1] == ‘\0’) length++; return length; } 我的问题是,当我通过一个str : char str[6] = “hi!”; 正如所料,内存读取: [‘h’][‘i’][‘!’][‘\0’][‘\0’][‘\0’][‘\0′] 如果你看看我的实现,你可以期望我得到6的回报 – 而不是3(我以前的方法),这样我就可以检查strlen可能包括额外分配的内存。 这里的问题是,我将不得不在初始化内存之外读取1个字节,以便在最后的null终结符处失败我的最后一个循环条件 – 这是我想要的行为。 然而,这通常被认为是不好的做法,并且有些是自动错误。 即使您非常具体地想要读入垃圾值(以确保它不包含’\ 0’),在初始化值之外读取也是一个坏主意吗? 如果是这样,为什么? 我明白那个: “buffer overruns are a favorite avenue for attacking secure programs” […]