c - 为什么我的 C 代码说两个字符串不相等,尽管它们看起来像这样?
问题描述
我正在尝试解决由这个问题引起的问题。我为显示问题而编写的代码如下所示。我使用 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.
如果你告诉我我做错了什么,我将不胜感激。
解决方案
C 中对字符串的相等检查不是以这种方式完成的!您正在做的检查是比较两个指针指向的内存中的地址,如果它们相等,它将返回 true。在这种情况下,它们不是,所以它返回 false。
为此,您需要使用strcmp。strcmp 返回 -1, 0, 1,具体取决于哪个比较字符串的值小于另一个。如果它们相等,它将返回 0。您可以在此处阅读更多信息:strcmp
推荐阅读
- javascript - 如何更新全局对象值?
- reactjs - 无法从 db 获取 _id 以与 axios 做出反应。对于删除功能
- javascript - 谁在 HTML 标签上监听 DOM 事件(例如 onclick)?
- python - Python 3.7 中的端口地址转发/Nat 函数
- amazon-web-services - 使用 cdk 的 aws 侦听器规则示例
- c++ - 2个模板类未定义引用错误的非模板友元函数
- c++ - 使用 C++ 将图像序列编码为 Youtube 的视频
- android - Android Room - 检索要更新的记录的最佳方式
- python - os.system powershell在python中带有引号
- html - Django 分页在 URL 中返回 %20 空格