当我明确声明一个字符串的值,然后将其与自身进行比较时,系统返回FALSE。这是否与系统添加的额外'\ 0'字符有关?我应该如何优化我的代码才能使其成为TRUE?C字符串长度
char name[5] = "hello";
if(name == "hello")
{
...
}
当我明确声明一个字符串的值,然后将其与自身进行比较时,系统返回FALSE。这是否与系统添加的额外'\ 0'字符有关?我应该如何优化我的代码才能使其成为TRUE?C字符串长度
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;
}
实际上,name是一个指向字符串“hello”地址的指针。你无法比较它们。所以你可以尝试使用strcmp
函数。还包括string.h
库。
喜欢:
strcmp(name,"hello");
也作为注释中的一个所指出的,采取的6字符数组包括“\0
”。
希望有所帮助。
_你不能比较他们 - 你可以! –
我的意思是比较地址和字符串是没有意义的比较。 –
如果两个参数相等,则strcmp()返回0。
char name[]="hello";
if(strcmp(name,"hello") == 0)
return TRUE;
else
return FALSE;
将'OP'定义的'name'传递给'strcmp()'会调用未定义的行为,因为'name' * * not *'0'-terminated。 – alk
为变量“名称”添加了适当的定义 –
从我的评论继续,你需要char name[6] = "hello";
持有'hello
(加上NUL终止字符)更妙的是,你可以使用
char name[] = "hello";
这将正确初始化name
含有6-字符(包括空字节)。
所有string.h
功能期待空终止字符串作为参数时,他们采取char *
或const char *
作为传递给函数的参数。
最后,正如Anuvansh的回答中指出的那样,您不能使用不等式条件来确定两个字符串是否相等或不同。您或者使用正常的比较函数strcmp
,strncmp
,memcmp
,或者您在每个字符串中停留在字符串不同的第一个字符处,或者在空字节处漫游,如果这些字符串是相同的。
看看,让我知道你是否还有其他问题。祝你好运,你的编码。
在C中,数组名称实际上是指向该数组的第一个元素的指针。
if(name == "hello")
你比较字符串指针所以它会返回false
你可以看到相同的概念本文 why is array name a pointer to the first element of the array?
你可以简单地包括“在:
你的情况串。H”库和使用的strcmp()函数
这样的代码:
char name[]="hello";
if(strcmp(name,"hello")==0){
.....
}
,使其真实姿态
将您的代码缩进4个字符以将其格式化为代码。 –
“*您可以简单包含库*”在编译期间不使用C库,而是在*编译后链接*。 *包括*用于编译*是由库提供的函数的* prototype/s *。 – alk
在C你不能比较这样的字符串,你在做什么是比较两个*指针*永远不会相等。阅读['strcmp'](http://en.cppreference.com/w/c/string/byte/strcmp)了解如何比较字符串。另外,请记住,字符串需要*终止*。包含5个字符的字符串需要包含终止符的*六个*字符的空间。这两个事实应该在任何[良好的初学者书](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)。 –
如果你打算使用'name'作为*字符串*,你需要'char name [6] =“hello”;''来保存''hello'(甚至更好'char name [] =“hello”;' 。为什么? (提示:你忘了'* 1'为* nul-terminating *字符':)'如果你不打算使用'name'作为*字符串,那么你知道你不能使用任何'string.h'函数期望以* nul结尾的字符串*作为参数。 –
@ DavidC.Rankin我尝试过'char name1 [] =“hello”;'然后'char name2 [] =“hello”;'最后'strcmp(name1,name2)'但仍然是FALSE。怎么可以这么简单是如此令人沮丧... – reiallenramos