我正在测试一个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 == "")
会导致函数返回这样奇怪的数字吗?
发布于 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返回正确的零值。
发布于 2018-12-13 15:03:57
==
在C中不执行字符串相等,它比较原始指针值,因此它比较char*
值str
和char*
值""
。C不会自动处理字符串,因此具有相同值的字符串不一定具有相同的内存地址。编译器可以为两个单独的字符串文字赋予相同的地址,但这也不能保证。
https://stackoverflow.com/questions/-100003066
复制相似问题