C字符串长度

C字符串长度,c,arrays,string,char,C,Arrays,String,Char,当我显式地声明字符串的值,然后将其与自身进行比较时,系统返回FALSE。这是否与系统添加的额外“\0”字符有关?我应该如何完善我的代码使之成为现实 char name[5] = "hello"; if(name == "hello") { ... } 实际上,name是一个指针,指向字符串“hello”的地址。你无法比较它们。因此,您可以尝试使用strcmp函数。还包括string.h库 比如: 还有一条评论指出,使用6的字符数组包含“\0” 希望有帮助。如果两个参数相等,strcm

当我显式地声明字符串的值,然后将其与自身进行比较时,系统返回FALSE。这是否与系统添加的额外“\0”字符有关?我应该如何完善我的代码使之成为现实

char name[5] = "hello";

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

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

比如:

还有一条评论指出,使用6的字符数组包含“
\0

希望有帮助。

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

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

继续我的评论,你需要
charname[6]=“hello”
要更好地保存
'hello
(加上nul终止字符),您可以使用

char name[] = "hello";
这将正确初始化
name
以包含6个字符(包括nul字节)

所有
string.h
函数在将
char*
const char*
作为传递给函数的参数时,都希望以nul结尾的字符串作为参数

最后,正如Anuvansh的回答中正确指出的,不能使用不等式条件来确定两个字符串是否相等或不同。您可以使用正常的比较函数
strcmp
strncmp
memcmp
,或者在每个字符串的第一个字符处停止移动指针,如果字符串相同,则在nul字节上移动指针


仔细检查一下,如果你还有任何问题,请告诉我。祝你的编码好运。

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

就你而言:

if(name == "hello")
将指针与字符串进行比较,使其返回false

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

只需包含“string.h”库并使用strcmp()函数即可

代码如下:

char name[]="hello";

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

.....

}
要使其成为现实,您不能(有效地)使用
比较字符串=
==
,您需要使用
strcmp
这是因为
=
==
将只比较这些字符串的基址。而不是字符串的内容。 不要使用预定义的数组大小,如
charname[5]=“hello”char name[]=“hello”
字符名[6]=“你好”何时使用

#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;
}
#包括
#包括
int main()
{
字符a[]=“你好”;
字符b[]=“你好”;
if(strcmp(a,b)==0)
printf(“字符串相等。\n”);
其他的
printf(“字符串不相等。\n”);
返回0;
}

在C语言中,你不能像那样比较字符串,你要做的是比较两个永远不相等的指针。了解如何比较字符串。另外,请记住字符串需要终止。五个字符的字符串需要六个字符的空间才能包含终止符。这两个事实都应该是任意的名称
用作字符串,请使用code>来保存
'hello
(或者更好的是
字符名[]=“hello”
)。为什么?(提示:您忘记了nul终止字符的
+1
:)
如果您不打算将
name
用作字符串
,则知道您不能使用任何期望以*nul终止的字符串作为参数的
string.h`函数。@DavidC.Rankin我尝试了
char name1[]=“hello”然后
charname2[]=“你好”和最后
strcmp(name1,name2)
但仍然为FALSE。如此简单的事情怎么会如此令人沮丧……相关:
(strcmp(name1,name2)==0)
有效。我查看了文档。愚蠢的我。将代码缩进4个字符以将其格式化为代码。C中的“您可以简单地包含库”库在编译期间不使用,但在编译之后会链接。编译包含的是库提供的函数的原型。你不能比较它们,你可以!我的意思是比较地址和字符串不是有意义的比较。将OP定义的
name
传递到
strcmp()
调用未定义的行为,因为
name
不是
0
终止的。为变量“name”添加了正确的定义
#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;
}