gpt4 book ai didi

null - 没有NULL的类C语言?

转载 作者:行者123 更新时间:2023-12-04 15:28:00 26 4
gpt4 key购买 nike

嗨我最近在看一个旧的video关于空指针如何成为十亿美元的错误。他指出 C# 和 java 都有运行时检查,但没有完全消除它,这在某种程度上是可以理解的。他还指出了一个他认为非常确定的 C 是一个大问题。我得到了以空结尾的字符串,没有长度的数组和其他一些东西是不好的(数十亿美元的缓冲区溢出漏洞),但是要完全删除空?

一些语言已经使 null 成为过去,而其他语言试图替代 C,但我找不到哪种语言同时完成了这两者。

如果 C 的 null 如此糟糕,那么为什么没有人创建它的替代品?即 Haskell 很好,但不能作为替代品运行。

最佳答案

不被替换是有原因的,这样看,C程序库如此庞大,代码成千上万,创建替换会像代码一样引起很多悲痛要更新以反射(reflect)更改,如 NULL在指针的上下文中意味着调用将失败并因此返回 NULL表示处理指针的代码失败的情况。此外,它用于 FILE * 的情况。操作,如果文件无效,NULL将被退回。想象一下,如果所有这些代码都被更改会很麻烦,不幸的是,它是 ANSI C 标准的一部分,因此在 $$$ 方面进行非常昂贵的练习,以使所有这些更改以适应 NULL 替换的新约定。

查看 C FAQ 中关于臭名昭著的 NULL 指针的此常见问题解答.

编辑:
顺便说一句,“我得到空终止的字符串、没有长度的数组和其他一些东西是不好的”这是一种错误的说法,因为你混淆了这两者……正如 Peter Van Der Linden 的“专家”的作者C Programming - Deep C Secrets',一个带有一个 l 的 nul 是一个 '\0',一个带有两个 l 的 null 是一个 NULL!没有 null 终止之类的东西,应该读作 nul 终止,即 '\0' 是表示字符串结束的占位符。

希望这可以帮助,
最好的祝福,
汤姆。

关于null - 没有NULL的类C语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173191/

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