[英]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的答案正确指出的那样,您不能使用不等式条件来确定两个字符串是否相等或不同。 您可以使用正常的比较函数strcmp
, strncmp
, memcmp
,也可以使指针沿每个字符串向下移动,并在字符串不同的第一个字符处停止,或者在字符串相等时在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.