当我明确说明字符串的值,然后将其与自身进行比较时,系统返回FALSE。这是否与系统添加的额外'\ 0'字符有关?我应该如何优化我的代码使其成为真正的?
char name[5] = "hello";
if(name == "hello")
{
...
}
答案 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.h
或char *
作为传递给函数的参数时,所有const char *
函数都希望以空字符结尾的字符串作为参数。
最后,正如在Anuvansh的回答中正确指出的那样,你不能使用不等式条件来确定两个字符串是相等还是不同。您可以使用正常比较函数strcmp
,strncmp
,memcmp
,也可以向下指向每个字符串,停止在字符串不同的第一个字符串上,或者 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")
使其成为