【问题标题】:C - checking if strings contain any non-null charactersC - 检查字符串是否包含任何非空字符
【发布时间】:2021-06-12 20:22:21
【问题描述】:

我有一个带有两个字符串参数的函数。我必须检查两个字符串是否包含任何非空字符。这是一个示例代码:

void fun(const char* str1, const char* str2)
{
    if (!str1 || !str1[0] || !str2 || !str2[0])
    {
        return;
    }

    // process
}

这是 C 中的标准方法还是您推荐其他解决方案?

【问题讨论】:

  • 你可以看看strlen
  • 包含任何非空字符的 string 将包含它作为第一个字符。如果您的指针本身可以是NULL,那么您的代码对我来说看起来不错。 strlen 在这里会有点矫枉过正,也不适用于 NULL 指针。
  • 根据函数的作用,检查每个字符串是否为非零长度可能是您不需要检查的多余边缘情况。验证指针不为空很好,但您可能应该重构代码,以便您不需要检查边缘情况。但是不知道函数的用途就很难说。
  • "这是 C 中的标准方法" --> 测试指向字符串的函数参数是否包含任何非空字符不是标准做法。标准做法是使用字符串,即使 "".

标签: c if-statement c-strings function-definition null-pointer


【解决方案1】:

把条件写成这样就够了

if ( !str1[0] || !str2[0] )

即当传递空指针调用未定义行为时,函数遵循 C 标准字符串函数的约定。

函数的调用者应保证传递的指针不是空指针。

【讨论】:

  • 或者if (str1[0] && str2[0]) { work(); } /* else { chill(); } */如果你不喜欢否定:-)
  • @pmg "如果你不喜欢否定" --> "如果你喜欢肯定" ;-)
  • 我比我更喜欢你的措辞,@chux,谢谢
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2012-11-15
  • 2013-12-04
  • 2011-01-21
  • 1970-01-01
  • 2015-02-07
相关资源
最近更新 更多