为什么我的C代码说两个字符串看起来并不相等,但它们并不相等?

时间:2019-04-13 22:50:44

标签: c string memset

我正在尝试解决由该问题引起的问题。我写来显示问题的代码可以在下面看到。我使用strcpy将一个全局字符串复制到使用memset创建的字符串中。尽管它们的内容看起来相同,但结果表明它们并不相同。因为末尾的if语句未执行。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MSG "mystr"

int main() {
  char buffer[6];
  memset (buffer, 0x00, 6);
  strcpy(buffer,MSG);
  printf("Buffer is %s.\n", buffer);
  printf("MSG is %s.\n", MSG);
  if (buffer == MSG) printf("True \n");
  return 0;
}

结果是;

Buffer is mystr.
MSG is mystr.

如果您告诉我我做错了什么,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

用这种方法没有完成C语言中字符串的相等检查!您正在执行的检查是将两个指针指向的内存地址进行比较,如果它们相等,则将返回true。在这种情况下,它们不是,所以它返回false。

您需要使用 strcmp 。 strcmp返回-1、0、1,具体取决于哪个比较字符串的值小于另一个字符串。如果它们相等,它将返回0。您可以在此处了解更多信息:strcmp