首页 > 解决方案 > 如何在 C 中打印/检测空值

问题描述

我有以下函数,我试图传递 aNULL来模拟“可选”参数:

char * slice2(const char * str, const unsigned int * start, const unsigned int * end) {

    size_t string_len = strlen(str);

    printf("Start: %d | End: %d\n", *start, *end);

    if (*start == NULL) inferred_start = 0;
    if (*end == NULL) inferred_end = string_len;

    // more code and such
} 

并称为:

unsigned int start = 6;
printf("'%s' ==> %s\n", "String", slice2("String", &start, NULL));

执行上述操作的正确方法是什么?

标签: c

解决方案


start是一个指向 an 的指针unsigned int,所以*startan 是unsigned int一个整数。

您的测试if (*start == NULL)试图将整数值与空指针常量进行比较。

不幸的是,它可以毫无错误地编译,因为NULL在法律上可以简单地定义为0. 但是要测试是否start是空指针,请使用

if (start == NULL) ...

同样对于end.

另外,这一行:

printf("Start: %d | End: %d\n", *start, *end);

只有在您确认既不是空指针start也不是空指针后才应执行end


推荐阅读