理解 C 中的 Char 数组相等

2023-12-07

提前为我的无知表示歉意。我不完全理解如何比较 C 中的 char 数组。我最初是用简单的方法比较 c 中的两个 char 数组==操作员。

所以在 C 函数中,我会做这样的事情。

char *a = "test";
char *b = "test";
if (a == b) ..do something

但我读到我应该使用strcmp代替==像这样。

char *a = "test";
char *b = "test";
if (0 == strcmp(a, b)) ..do something

哪一个是正确的,为什么?另一个在做什么?


if (a == b)

这里您正在比较指针而不是字符串

strcmp(a, b)

这里你正在比较字符串

Which one is correct and why? What is the other one doing?

由于有 2 个字符串存储在不同的内存位置,或者如果存储相同的字符串,则有可能a==b比较指针没有意义。您想要的是比较指针指向的位置的内容。这是由strcmp()这是比较字符串的正确方法。

例如 :

#include <stdio.h>

int main(void) {
char *a = "test";
char *b = "test";

printf("%p\n %p",(void *)a,(void *)b);
    return 0;
}

输出是

0x8048540 
0x8048540

所以指针a和b都指向同一个内存位置a==b请注意,这里我们比较的不是字符串中的实际字符,而是指针。

我在另一台机器上运行相同的代码,并且存储该字符串的位置不同。

0x4005f8
0x4005fd

所以现在即使字符串可能相同,你也会看到a != b。 因此使用strcmp()比较字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解 C 中的 Char 数组相等 的相关文章

  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 如何在网页上制作所见即所得的部分?

    我想了解网络上所见即所得页面的基本原理 我开始对其进行编码并使用文本区域进行制作 但很快我意识到我无法在文本区域中添加或显示图像或任何 HTML 所以我使用 DIV 制作它 但我不明白如何使其可编辑 所以 大体上来说 我想知道如何 原则上
  • 有没有办法为 Docker 编译和静态链接 ruby​​ 库?

    2015 年 6 月 29 日更新 InfraRuby 编译器和运行时 用于 JVM 上的静态类型 Rub y 我想要一个静态链接的二进制文件 通过一个简单的 ruby 爬虫来构建一个小型的 docker 容器 类似 Go 生成的东西 CG
  • 将值从 Windows 窗体应用程序发送到 Asp.Net Core Api

    我创建了一个简单的 Asp Net Api 来在 Winforms 应用程序中显示学生的信息 但是 现在我想要创建一个 Api 它接受来自 Windows 窗体应用程序的值并将这些值插入数据库 我怎样才能创造这样的东西 这是我到目前为止所尝
  • 如何对表示为字节向量的多列进行有效排序?

    我有一个名为Dataframe这本质上是一个std vector
  • jpql order by 子查询产生意外的 AST 节点异常

    我将一个工作 postgre sql 查询翻译为 jpql 但 hibernate 抛出了一个 org hibernate hql ast QuerySyntaxException 意外的 AST 节点 例外 这些是我的核心模型类 Enti
  • 只监听文档的变化而不是一直监听

    我只想监听 firebase 中文档的更改 但现在似乎它每时每刻都在监听 尽管没有任何更改 我可以看到这一点 因为当我将其打印到控制台时 它永远不会停止 FirebaseFirestore instance collection users
  • 回调的缺陷

    From http doc qt nokia com 4 7 signalsandslots html 回调有两个根本缺陷 首先 它们不是类型安全的 我们 永远无法确定 处理函数将调用 带有正确参数的回调 有人能解释一下 在什么情况下不能确
  • ASP.net MVC - 具有可为空属性的自定义属性错误消息

    我的视图模型中有一个属性可以接受整数和可为空的值 Display Name Code Postal public int CodePostal get set 当我输入字符串值时 如何显示默认消息之外的另一条消息 The field Cod
  • 如何在angular2中使用nativescript的WebView?

    我正在尝试插入一个web view在我的页面上并收听 loadFinishedEvent 但为了做到这一点 我需要在我的中找到网络视图成分 ts文件 通过nativescript方式我需要用标签包装我的xml UI
  • 自动更新 Windows 10 IoT Core 内的应用程序?

    最近我有一个问题 如果我编写一个 UWP 应用程序并安装到具有 Windows IoT Core 操作系统的 Raspberry Pi 中 是否可以在 Raspberry Pi 内为我的应用程序设置自动 OTA 更新 就像 Windows
  • 即使设置 date_default_timezone_set 之后,PHPExcel 也会得到错误的时区

    我在用着http phpexcel codeplex com在我的一个项目中 我遇到了一个问题 我想在单元格内写入 time 值 我正在这样做 function writeTimeLine objActiveSheet lineNumber
  • CORS 和内部服务器错误响应

    在 ASP NET WebApi2 中 如果存在内部服务器错误 则会发送 500 响应withoutAccess Control Allow Origin 标头 即使CORS 已启用 这会导致浏览器报告 CORS 错误 而不是内部服务器错误
  • 在 python 3.5 中安装 scrapy 时出错[重复]

    这个问题在这里已经有答案了 我正在 Python 3 5 中安装 Scrapy 我指的是安装指南here 我已经安装了pip and conda 我尝试了指南中提到的两种方法 但收到此错误 我已经安装了pip and minoconda c
  • Python:派生类访问同一内存位置中基类的字典

    我想知道为什么在基类中定义并从派生类访问的字典显然只存在于一个内存位置 一个简短的例子 class BaseClass testdict dict testint 0 def add dict entry self self testdic
  • MPMoviePlayerController 添加 UIButton 以随控件淡出的视图

    我正在尝试将 UIButton 添加到MP电影播放器 控制器以及标准控件 该按钮出现在视频上 并按预期接收触摸事件 但我希望它使用标准控件淡入和淡出 以响应用户触摸 我知道我可以通过滚动自己的自定义播放器控件来实现这一目标 但这似乎很愚蠢
  • 无法在 Mac OS 上使用 android sdk 创建 AVD

    我在Mac操作系统上安装了Android Studio和JDK1 8 我跟着说明并使用 API 15 作为最低 sdk 创建了一个新应用程序 我尝试从 AVD 管理器创建 AVD 通过选择创建新虚拟设备 gt nexus 6 gt loll
  • Python 中自增和自减运算符的行为

    如何使用预自增 自减运算符 就像在 C 中一样 为什么 count运行 但不改变变量的值 不是运营商 是两个 运营商 这 运算符是identity运算符 它什么也不做 澄清 and 一元运算符仅适用于数字 但我认为您不会期望假设的 操作符来
  • 使用 .htaccess 文件扩展名删除程序代码时,网站表单不携带任何值

    我在 HTACCESS 文件中有这段代码 它工作正常 因为它删除了 php 文件扩展名 它还允许加载没有扩展名的页面 For security reasons Option followsymlinks cannot be overridd
  • 在x86(32位)Linux上启动x86_64代码,在x86_64 CPU上运行

    是否可以在 i686 Linux x86 32 位 上启动 x86 64 代码 我的 CPU 是现代 Core 2 它本身可以运行 x86 64 64 位代码 但操作系统是 32 位 启动的代码是纯数学的 几乎不需要与操作系统交互 我想测量
  • 理解 C 中的 Char 数组相等

    提前为我的无知表示歉意 我不完全理解如何比较 C 中的 char 数组 我最初是用简单的方法比较 c 中的两个 char 数组 操作员 所以在 C 函数中 我会做这样的事情 char a test char b test if a b do