c - 使用指针反转 C 中的字符串 - if 语句的目的?

标签 c string

在下面反转字符串的代码中,我不明白 if 语句的目的是什么。这个 if 语句试图捕捉什么情况?

这不是多余的吗,因为您已经设置了 char*e​​nd= str,因此语句 if(str) 必须为 true,否则您的代码此时已经失败了?

void reverse(char* str)
{
    char *end = str;
    char temp;
    if (str) 
    {
        while (*end)
        {
            end++;
        }
    }
    end--; //pulls back one for \0 character
    while (str < end)
    {
        temp = *str;
        *str++ = *end;
        *end-- = temp;
    }    
}

最佳答案

它可以防止取消引用 NULL 指针,非常好的做法。

如果 str == NULL,则 *end 将是未定义的行为,因此在取消引用之前检查这一点确实是一件好事,因为忽略这种可能性会导致一个很难检测到的错误,当然使用调试器除外,但是,通常情况下,当您可以几乎不需要任何代价来避免它时,为什么还需要跟踪问题。

这样做实际上会更好

if (str == NULL)
    return;

关于c - 使用指针反转 C 中的字符串 - if 语句的目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28641002/

相关文章:

c - 如何使用 malloc.h header 为结构指针分配内存?

c - 随机化功能

Python:提取字符串的一部分以某种方式被推到新行

c# - 在 C# 中拆分不带分隔符的字符串

c# - 如何从字符串变量创建常量字符串

c++ - 如何在 C++ 中有效地检查一个单词的所有字母是否相同

c - 循环 C 内重复出现错误

c - 变量的名称/内存地址如何在位级别表示?

python - 变量初始化后如何制作字符串f-string?

c - 如何读取 C 中以空格分隔的 0-9 数字?