C字符串长度

时间:2017-04-22 08:01:35

标签: c arrays string char

当我明确说明字符串的值,然后将其与自身进行比较时,系统返回FALSE。这是否与系统添加的额外'\ 0'字符有关?我应该如何优化我的代码使其成为真正的?

char name[5] = "hello";

if(name == "hello")
{
    ...
}

5 个答案:

答案 0 :(得分:5)

您无法(有用)使用!===比较字符串,您需要使用strcmp原因是因为!=和{{ 1}}只会比较这些字符串的基地址。不是字符串的内容。 不使用预定义的数组大小,例如==,而不是在使用时使用char name[5] = "hello";char name[] = "hello";

char name[6] = "hello";

答案 1 :(得分:3)

继续发表评论,您需要char name[6] = "hello";来保留'hello(以及 nul-terminatedating 字符)更好的是,您可以使用

char name[] = "hello";

这将正确初始化name以包含6个字符(包括 nul-byte )。

string.hchar *作为传递给函数的参数时,所有const char *函数都希望以空字符结尾的字符串作为参数。

最后,正如在Anuvansh的回答中正确指出的那样,你不能使用不等式条件来确定两个字符串是相等还是不同。您可以使用正常比较函数strcmpstrncmpmemcmp,也可以向下指向每个字符串,停止在字符串不同的第一个字符串上,或者 nul-字节如果字符串是等效的。

仔细看看,如果您有任何其他问题,请告诉我。祝你的编码好运。

答案 2 :(得分:1)

如果两个参数相等,则strcmp()返回0。

char name[]="hello";
if(strcmp(name,"hello") == 0)
    return TRUE;
else
    return FALSE;

答案 3 :(得分:0)

实际上,name是一个指向字符串地址的指针" hello"。你无法比较它们。所以你可以试试strcmp函数。还包括string.h库。

像:

strcmp(name,"hello");

也作为评论点之一,取一个6的字符数组来包含' \0'。

希望有所帮助。

答案 4 :(得分:0)

在C中,数组名实际上是指向该数组的第一个元素的指针。

在你的情况下:

b

将指针与字符串进行比较,以便返回false

您可以在本文中看到相同的概念 scanf

您可以简单地包含“string.h”库并使用strcmp()函数

像这样的代码:

if(name == "hello")

使其成为