关于数组:C字符串长度

C string length

当我明确声明一个字符串的值,然后将其与自身进行比较时,系统返回 FALSE。这是否与系统添加的额外 \\'\\\\\\\\0\\' 字符有关?我应该如何改进我的代码以使其成为 TRUE?

1
2
3
4
5
6
char name[5] ="hello";

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


您不能(有用地)使用 !=== 比较字符串,您需要使用 strcmp 这样做的原因是因为 !=== 只会比较它们的基地址字符串。不是字符串的内容。
不要使用像 char name[5] ="hello"; 这样的预定义数组大小,而在使用

时可以使用 char name[] ="hello";char name[6] ="hello";

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>

int main()
{
char a[] ="hello";
char b[] ="hello";

   if (strcmp(a,b) == 0)
      printf("strings are equal.\
"
);
   else
      printf("strings are not equal.\
"
);

   return 0;
}

继续我的评论,您需要 char name[6] ="hello"; 来保存 'hello (加上 nul 终止字符)更好的是,您可以使用

1
char name[] ="hello";

这将正确初始化 name 以包含 6 个字符(包括 nul 字节)。

当所有 string.h 函数将 char *const char * 作为参数传递给函数时,它们都需要一个以 nul 结尾的字符串作为参数。

最后,正如 Anuvansh 的回答中正确指出的那样,您不能使用不等式条件来确定两个字符串是否相等或不同。您要么使用普通的比较函数 strcmpstrncmpmemcmp,要么沿着每个字符串向下移动一个指针,该指针在字符串不同的第一个字符处停止,或者如果字符串相等,则在 nul 字节处停止。

如果您有任何其他问题,请仔细查看并告诉我。祝你的编码好运。


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

1
2
3
4
5
char name[]="hello";
if(strcmp(name,"hello") == 0)
    return TRUE;
else
    return FALSE;


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

在你的情况下:

1
if(name =="hello")

你比较指向字符串的指针,所以它会返回 false

您可以在本文中看到相同的概念
为什么数组名是指向数组第一个元素的指针?

您可以简单地包含 "string.h" 库并使用 strcmp() 函数

这样的代码:

1
2
3
4
5
6
7
char name[]="hello";

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

.....

}

让它成为真正的


其实name是一个指针,指向字符串"hello"的地址。你无法比较它们。所以你可以试试 strcmp 函数。还包括 string.h 库。

喜欢:

1
strcmp(name,"hello");

也正如其中一条评论指出的那样,采用 6 的 char 数组来包含 \\'\\0\\'。

希望对您有所帮助。