比较字符串文字与字符数组

标签 c

我找不到类似的答案。

  char buffer[] = {'a', '0'};
  char p2[] = "a";
  printf("%d", buffer==p2); // prints 0

我如何进行比较? 这是一个类似的问题吗?我如何将字符串文字与字符数组进行比较。

char buffer[] = {'a', '0'};
printf("%d", buffer=="a"); // prints 0

以上只是例子,但我真的需要这个:

 char buffer[] = {'e','a','b','g','e','l','e','g','o','n','\000','p','k','n','m','l','\000','j', 'i', 'h'};
printf("%d", buffer=="eabgelegon\000pknml\000jih");

我无法使用任何其他功能。

最佳答案

在许多情况下,数组(或字符串)被转换为其第一个元素的地址。

在您的代码中,在 printf() 中,正在比较这些地址。

比较你需要的地址指向的东西strcmp() (对于真正的字符串)或 memcmp() (对于二进制数据)

char buffer[] = {'e','a','b','g','e','l','e','g','o','n','\000','p','k','n','m','l','\000','j', 'i', 'h'};

int equal1 = memcmp(buffer, "eabgelegon\000pknml\000jih", 20);
printf("%d", equal1);
int equal2 = memcmp(buffer, "eabgelegon\000XXXXXXXXX", 20);
printf("%d", equal2);

int equal3 = strcmp(buffer, "eabgelegon\000pknml\000jih");
printf("%d", equal3);
int equal4 = strcmp(buffer, "eabgelegon\000XXXXXXXXX");
printf("%d", equal4);

关于比较字符串文字与字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528380/

相关文章:

c - 为什么要使用带结构的 malloc?

c - 了解警告 "comparison of promoted ~unsigned with unsigned"

C程序: __start

c - 以编程方式查询 USB 闪存驱动器卷标

c - 在字符串中的每个字符之间添加 '-' ?

c - 如何设置以 root 身份使用 execl 以用户身份启动应用程序?

c - 如何打印一个巨大的数字?

c++ - 在 C/C++ 中创建 10 位数据类型

c++ - 在 iOS 中使用 Objective-C 背后的理念是什么?为什么不是 C++?

c - UNIX 套接字连接被拒绝