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