繁体   English   中英

C字串长度

[英]C string length

当我明确声明一个字符串的值,然后将其与自身进行比较时,系统返回FALSE。 这是否与系统添加的额外“ \\ 0”字符有关? 我应该如何完善我的代码以使其正确?

char name[5] = "hello";

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

您不能(有用)使用!===比较字符串,而需要使用strcmp这样做的原因是因为!===只会比较那些字符串的基址。 不是字符串的内容。 不要使用预定义的数组大小,例如char name[5] = "hello"; 而不是可以使用char name[] = "hello"; char name[6] = "hello"; 使用时

#include <stdio.h>
#include <string.h>

int main()
{
char a[] = "hello"; 
char b[] = "hello";

   if (strcmp(a,b) == 0)
      printf("strings are equal.\n");
   else
      printf("strings are not equal.\n");

   return 0;
}

继续我的评论,您需要char name[6] = "hello"; 保持'hello (加上n 终止字符)甚至更好,您可以使用

char name[] = "hello";

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

当所有string.h函数将char *const char *作为传递给函数的参数时,都期望以nul终止的字符串作为参数。

最后,正如Anuvansh的答案正确指出的那样,您不能使用不等式条件来确定两个字符串是否相等或不同。 您可以使用正常的比较函数strcmpstrncmpmemcmp ,也可以使指针沿每个字符串向下移动,并在字符串不同的第一个字符处停止,或者在字符串相等时在nul字节处停止。

仔细检查一下,如果您还有其他问题,请与我联系。 祝您编码顺利。

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

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

实际上,name是一个指向字符串“ hello”的地址的指针。 您无法比较它们。 因此,您可以尝试使用strcmp函数。 还包括string.h库。

喜欢:

strcmp(name,"hello");

也正如注释之一指出的那样,采用6的char数组来包含' \\0 '。

希望能有所帮助。

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

在您的情况下:

if(name == "hello")

您将指针与字符串进行比较,因此它将返回false

您可以在本文中看到相同的概念, 为什么数组名是指向数组第一个元素的指针?

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

像这样的代码:

char name[]="hello";

if(strcmp(name,"hello")==0){

.....

}

使其真实

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM