-4

什么是需要使用空指针才能正确执行的应用程序示例?简单地检查空指针并进行测试不算数。这个例子应该是 C 程序员“常用的”。

经过一番思考,我有一个可能的例子,但我不想影响反应(还)。

编辑:这个问题是一个编程工作的面试,需要知识,但不需要 C 中的上帝般的技能。答案不会是该语言的一些深奥方面。

4

6 回答 6

6

execvp系列函数期望参数列表以空指针终止。例如,

 execvp("/bin/ls", arguments);

这里arguments应该以NULL结尾。

于 2013-01-17T22:18:41.197 回答
6

该函数strtok()在第二次和后续迭代中依赖于 NULL;其表现较好的亲戚strtok_r()strtok_s().


重点稍有不同:

  • 字符串搜索函数,例如strchr()strstr()在找不到您要求他们查找的内容时返回 NULL 指针。

  • 当分配失败时,内存分配函数返回 NULL 指针。

  • fopen()函数在打开文件失败时返回一个 NULL 指针。

  • opendir()函数在打开目录失败时返回一个 NULL 指针。

注意到这里的主题了吗?NULL 指针通常作为错误指示返回。这是否算作“只是检查”也许更值得商榷。

于 2013-01-17T22:20:34.873 回答
2

链接列表。

struct node
{
   int data;
   node* next;
}

最后一个指针总是必须是NULL,对吧?如果不是,程序将无法正确执行。这仍然可以算作测试,但它是正确执行程序所必需的。想法?

于 2013-01-17T22:32:48.520 回答
0

NULL 值显然对于指示某个值的“结束”或“不存在”非常有用。例如,函数中的可选参数由 NULL 表示。或“尚未分配...”。

但是 NULL 值作为参考没有用,除了比较之外,在不需要指针时使用 NULL 值或赋值是不正确的[显然,假设它已被正确释放]。

我正在处理一段在操作系统启动早期运行的代码 - 在代码的后期运行中,它需要在某些地方具有当前任务。但在系统正常启动之前,没有当前任务。所以我需要指出“没有当前任务”。我使用 NULL 指针 [然后如果指针为 NULL 则访问相关的“保留”数据结构] 和一个变量来检查是否已创建任务。[这很简单,但概念适用]。

从技术上讲,在 MS-DOS(或“实模式”中的其他 8086)中,NULL 指针也将用于设置除以零的向量 [这是“向量零”,向量表位于地址零 - 所以空值]。但是由于现代操作系统[通常]在其他地方有中断向量表,并且零地址通常受到读/写操作的保护,这不再是指针的“有效使用”。当然,其他一些嵌入式系统可能仍然使用地址零来表示“有意义”。

于 2013-01-17T22:23:41.717 回答
0

在我的头顶上:

  • 使用 instrtok获取第一个令牌之后的连续令牌;
  • 终止exec*函数中的参数列表
  • 用于realloc初始分配
于 2013-01-17T22:34:14.373 回答
0

NULL可以安全地传递给free(),因此在以下代码NULL中可能会或可能不会获得 -ed 的情况下,初始化指针通常很有用。malloc()然后,您可以安全地调用free(),例如在函数的末尾,无论指针是否实际使用,例如

int * p = NULL; // NB: without this initialisation we would need additional logic
                //     to know whether to call free(p) or not later...
...

if (...)
{
    ...
    if (...)
    {
       ...
       p = malloc(42);
       ...
    }
    ...
}

...

free(p);         // free allocated memory, or no-op if p == NULL
于 2013-01-17T22:40:29.223 回答