c - 如何在 C 中检查 NULL 指针?

标签 c strcmp null-pointer argc

<分区>

这学期我有一个C的作业,老师说我应该把这个函数写的不那么复杂。 我是编程新手,似乎找不到答案。他说我们在类里面做过一些这类的东西,但我找不到这样的东西。

int checkforerror(int argc){
    if (argc != 3) {
        fputs("Too little or too many arguments!\n", stderr);
        exit(EXIT_FAILURE);
    }
}

他还指出,我必须检查函数中的空指针。我在类里面写的一些程序中发现了一些空指针检查,但我不确定这样是否好。

int mycmp(char *s1, char *s2){

    if (!(s1 && s2))
       return EXIT_FAILURE;

所以我们在类(class)中做了类似的事情。 我也想过这个:

if (s1 == NULL && s2 == NULL)
   return EXIT_FAILURE;

我真的不知道它们是否真的是空指针检查,我应该使用哪个。

你能帮我解决这些问题吗?

最佳答案

根据 De_Morgan's_laws

(not (A and B) = not A or not B)

你的情况

if (!(s1 && s2)) 

相同
 if (!s1 || !s2))  //same as if (s1 == NULL || s2 == NULL)

在这里,您正在检查 s1s2 是否为 NULL,如果是,则退出。


但是在第二个

if (s1 == NULL && s2 == NULL)
   return EXIT_FAILURE;

如果 s1s2 都是 NULL 那么你就退出了。

如果 s1s2 中的任何一个不是 NULL,您将继续并尝试访问它们,从而调用未定义的行为。

关于c - 如何在 C 中检查 NULL 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779263/

相关文章:

C - 获取字符串前 n 个字符后的子字符串

c++ - 用一些 ASM 代码包装函数指令

c - 我无法让 gcc 工作

c - 为什么这个 strncpy() 实现会在第二次运行时崩溃?

c - 当我们将 "if(ptr==NULL)"用作整数指针 ptr 时,NULL 指针是否隐式转换为类型 (int*)?

C - 条件语句 & strcmp & NULL 字符串

c - if 和 else if 与 strcmp 序列错误/重叠

c - 用户名和密码验证 Turbo C

C - 为空指针赋值

android - 初始化 SharedPreferences 给出 : Attempt to invoke virtual method on a null object reference