首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C编程 - 检查空字符串但返回奇怪的数字

C编程 - 检查空字符串但返回奇怪的数字
EN

Stack Overflow用户
提问于 2018-12-13 05:39:43
回答 2查看 0关注 0票数 0

我正在测试一个C程序来检查字符串中的字符数。但是当 我尝试使用“”(空字符串)进行测试时,该函数返回一个奇怪的值。 功能

int getStringLength(char*str)
{
   if (str == 0 || str == "") // if input NULL or "" should return 0
   {
     return 0;
   }
}

函数调用

void test_StringLength_a_give_an_empty_string_expect_0(void)
{
TEST_ASSERT_EQUAL(0, getStringLength("")); // (expected value, value return from function)
}

输出我得到 输出的截图

我的问题是为什么

    if(str == "")

会导致函数返回这样奇怪的数字吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-13 14:02:29

如果要比较字符串的内容(而不是它们的内存位置),则需要使用strcmp。在您的情况下,这是不必要的,因为可以通过检查字符串结束标记(*str == '\0')的第一个字符来检查零长度字符串。

您还需要添加代码,该代码为您提供非NULL值的实际长度,这似乎是您缺少的 - 这几乎可以肯定您获得了您提到的“奇怪”值。

因此,为您的目的更好的功能将是:

int getStringLength(char *str) {
    if (str == NULL) return 0;
    return strlen(str);
}

您会注意到我既没有使用strcmp也没有使用first-character-check方法来检查空字符串。 那是因为strlen返回正确的零值。

票数 0
EN

Stack Overflow用户

发布于 2018-12-13 15:03:57

==在C中不执行字符串相等,它比较原始指针值,因此它比较char*strchar*""。C不会自动处理字符串,因此具有相同值的字符串不一定具有相同的内存地址。编译器可以为两个单独的字符串文字赋予相同的地址,但这也不能保证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档