字符串终止符'\0'如何与整数常量0具有相同的值?

2024-04-19

我有以下代码 -

#include <stdio.h>
#define LENGTH 5
int main(){
    char* ch[LENGTH] = {"Zero", "One", "Two", "Three", "Four"};
    char* pc;
    char** ppc;
    for(int i=0; i<LENGTH; i++){
        ppc = ch+i;
        pc = *ppc;
        while(*pc != 0){
            printf("%c ", *pc);
            pc = pc +1;
        }
        printf("\n");
    }
    return 0;
}

这是使用字符串的多重间接的示例。

输出是

Z e r o 
O n e 
T w o 
T h r e e 
F o u r 

Here in while()循环而不是*pc != '\0', *pc != 0用来。

但两种方法给出相同的输出。为什么会这样呢?


A char实际上只不过是一个小整数,因此可以隐式转换为int。此外,字符文字(例如'A')实际上由编译器表示为int值(例如文字字符'A'表示为int value 65 in ASCII http://en.cppreference.com/w/c/language/ascii编码)。

C 语言允许插入任意整数(可以放入一个char) using escapes。有两种方法可以转义此类任意值,使用octal https://en.wikipedia.org/wiki/Octal数字,或使用十六进制 https://en.wikipedia.org/wiki/Hexadecimal。例如,A 的 ASCII 值为65,可以表示为'A', '\101'以八进制表示,'\x41'以十六进制表示,or plain 65.

有了这些信息,应该很容易看出字符文字'\0'是整数的八进制表示0。那是,'\0' == 0.

您可以通过打印来轻松验证这一点:

printf("'\\0' = %d\n", '\0');

我提到编译器将所有字符文字视为int值,但还提到使用转义八进制或十六进制数字的任意数字需要适合char。这似乎是一个矛盾,但事实并非如此。字符值必须适合char,但编译器会在内部将其转换为int当它解析代码时。

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

字符串终止符'\0'如何与整数常量0具有相同的值? 的相关文章

  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • .gitattributes 中的“* text=auto eol=lf”和“* text eol=lf”有什么区别?

    这与这个问题非常相似 gitattributes 中的 text auto 和 text eol lf 有什么区别 https stackoverflow com questions 46590142 what is the differr
  • 合并(使用挤压)来自另一个分支的所有更改作为单个提交

    在 Git 中 有没有一种方法可以将一个分支的所有更改合并到另一个分支 但同时压缩为单个提交 我经常在单独的分支中开发新功能 并定期提交 推送 主要用于备份或将我正在开发的内容转移到另一台机器上 大多数这些提交都会说 Feature xxx
  • 如何更改datagridview中的行颜色

    我想更改 datagridview 中特定行的颜色 当列单元格 7 的值小于列单元格 10 的值时 该行应更改为红色 关于如何实现此目的有什么建议吗 您需要循环遍历 datagridview 中的行 然后比较每行上第 7 列和第 10 列的
  • Angular2 可观察定时器条件

    我有一个计时器 initiateTimer if this timerSub this destroyTimer let timer TimerObservable create 0 1000 this timerSub timer sub
  • 如何解决 WPF 中的“绑定表达式路径错误”?

    我将模型对象的可观察集合绑定到数据网格 但是当我将绑定设置到集合时 我收到了指向人员的路径错误 在调试此问题时 我检查了 CustomerModel 中的公共属性在 DataGrid 绑定中是否正确命名 而且返回到模型的集合不为空 我还检查
  • 为什么使用window.onload

    我尝试自己找到这个问题的答案 但只找到了有关如何使用 onload 事件的说明 我似乎没有抓住要点 我被告知 如果我希望在页面加载时发生某些事情 我应该像这样使用 window onload 但现在我自己思考 我想知道这样做的意义是什么 因
  • 将 forMine 设置为 false 进行搜索时,youtube v3 api 错误

    我正在编写一些函数Youtube API version 3 我在用python但在谷歌提供的测试控制台中确认了我的错误 我正在提出所有授权请求 只是没有在下面粘贴我的密钥 Python 客户端库自动添加forMine参数给我的Search
  • 如何在不暂存的情况下 git 添加新文件?

    为了有效地 并按预期 使用 git 我进行了小的原子提交 而我确实有更长的会话 我所做的不仅仅是一件事 因此 我大量使用git add p 不过 这不适用于全新的文件 因为我以后往往会忘记它们 我想做的是告诉git那里is一个新文件 我希望
  • 我在哪里可以学习编写词法分析器的基础知识?

    我想学习如何编写词法分析器 我的大学课程有一项作业 我们必须编写一个解析器 以及与之配套的词法分析器 但这是给我们的 没有任何指导或反馈 超出了标准 所以我并没有真正从中学到很多东西 搜索这个主题后 我只能找到相当高级的文章 这些文章重点关
  • 如何通过 UNC 加速 Powershell Get-Childitem

    DIR or GCI在 Powershell 中很慢 但在 CMD 中很快 有什么办法可以加快这个速度吗 在 CMD exe 中 经过亚秒级延迟后 其响应速度与 CMD 窗口可以跟上的速度一样快 dir remote server doma
  • OpenJPA 的 Maven 原型

    问候 我刚刚开始探索 Maven 我使用 m2eclipse 就像在 Eclipse 中使用 Maven 一样 我发现有一个基于休眠的原型 组 ID com rfc maven archetypes 和 工件 ID jpa maven ar
  • 使用矩形在图像上创建搜索区域

    我有一个显示图像的图像查看器 我想使用鼠标在图像上绘制一个矩形 并获取矩形的 x 和 y 坐标 X1 X2 Y1 和 Y2 我将使用这些坐标创建一个搜索区域 并在数组中查找最大值和最小值 该数组的两个轴上的像素数与图像的像素数完全相同 有人
  • 如何在C++中初始化结构体数组?

    我有以下内容struct在我的 C 代码中 我使用的是 Visual Studio 2010 struct mydata string scientist double value 我想做的是能够以快速的方式初始化它们 类似于 C99 中的
  • PHP- HTML 解析 :: 如何使用简单的 html dom 解析器获取网页的字符集值?

    PHP 如何简单地获取网页的字符集值html dom 解析器 http simplehtmldom sourceforge net utf 8 windows 255 等 备注 必须使用 html dom 解析器来完成http simple
  • Symfony2 createQuery 按字段排序

    你好 我在 phpmyadmin 中写了这个查询 它可以工作 gr8 SELECT u FROM users AS u WHERE u id 14469 OR u id 685 ORDER BY u id field u id 14469
  • FFMPEG - 连续的非单调 DTS

    我有几个需要连接的文件 有时文件工作和连接似乎没有问题 然后在其他文件上 文件不会连接 我得到 非单调 DTS 我一直在谷歌上搜索我应该对这些文件进行哪些处理 以便它们正确连接 但我仍然没有找到 有没有办法让所有文件的 DTS 完全相同 我
  • 是否可以使用不同的占位符掩码输入?

    由于我的表单没有标签 我希望能够在 Angular 和 Angular UI Utils Mask 中使用不同的占位符 div div
  • AutoCAD 如何计算仅由拟合点定义的样条曲线的终点切线?

    AutoCAD 允许将 SPLINE 实体存储在仅由以下定义的 DXF 文件中 拟合点 问题是 这样的样条定义有无限 数值正确的解决方案 Autodesk 不提供必要的 从给定的拟合点计算所需参数的信息 tl dr 缺少的信息是估计的起点和
  • 图像轮廓轴

    对于放射线扫描 我已经能够获取轮廓 我有兴趣找到中心轴 我怎样才能用Python做到这一点 这是我的轮廓代码 import cv2 img cv2 imread A png imgray cv2 cvtColor img cv2 COLOR
  • 字符串终止符'\0'如何与整数常量0具有相同的值?

    我有以下代码 include