理解声明 C 字符串的两种方法[重复]

2024-01-03

几周前,我开始学习编程语言 C。我了解 HMTL/CSS、Javscript、PHP 和基本服务器管理等 Web 技术,但 C 语言让我感到困惑。据我了解,C 语言没有字符串数据类型,只有字符数据类型,但我可能是错的。

我听说有两种声明字符串的方法。这两行声明字符串有什么区别:

a.) char stringName[];
b.) char *stringName;

我明白了char stringName[];是一个字符数组。然而,第二行让我感到困惑。据我了解,第二行创建了一个指针变量。指针变量不应该是另一个变量的内存地址吗?


在C语言中,正如你所说,“字符串”是一个数组char。 C 规范中内置的大多数字符串函数都期望字符串以“NULL 终止”,这意味着最后一个字符串char字符串的一个是0。不是代表数字零的代码,而是实际值0.

例如,如果您的平台使用 ASCII,则以下“字符串”是“ABC”:

char myString[4] = {65, 66, 67, 0};

当您使用char varName[] = "foo"语法,您在堆栈上分配字符串(或者如果它在全局空间中,则您在全局分配它,但不是动态分配。)

C 语言的内存管理比您可能使用过的许多其他语言更加手动。特别是,有一个“指针”的概念。

char *myString = "ABC"; /* Points to a string somewhere in memory, the compiler puts somewhere. */

Now, a char *是“指向 char 或 char 数组的地址”。请注意该语句中的“或”,对于程序员来说,了解情况很重要。

确保您执行的任何字符串操作不超过分配给指针的内存量也很重要。

char myString[5];
strcpy(myString, "12345"); /* copy "12345" into myString. 
                            * On no! I've forgot space for my nul terminator and 
                            * have overwritten some memory I don't own. */

“12345”实际上是 6 个字符长(不要忘记0最后),但我只保留了 5 个字符。这就是所谓的“缓冲区溢出”,并且是许多严重错误的原因。

“[]”和“*”之间的另一个区别是创建一个数组(正如您所猜测的)。另一种是不保留任何空间(除了保存指针本身的空间)。这意味着,除非您将其指向您知道有效的地方,否则不应使用指针的值进行读取或写入。

还有一点(评论里有人说的)

您无法将数组作为参数传递给 C 中的函数。当您尝试时,它会自动转换为指针。这就是为什么我们传递指向字符串的指针而不是字符串本身

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

理解声明 C 字符串的两种方法[重复] 的相关文章

  • C 中的变量定义是什么意思[重复]

    这个问题在这里已经有答案了 你们能告诉我 这在 C 中意味着什么吗 define Privileged Data Privileged Data static int dVariable 编译器对变量进行寻址有特殊意义吗 这只是一个宏Pri
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源

随机推荐

  • Pandas 和 Matplotlib - fill_ Between() 与 datetime64

    有一个 Pandas 数据框
  • ggplot 中的热图,每组不同的颜色

    我正在尝试在 ggplot 中生成热图 我希望每个组都有不同的颜色渐变 但不知道该怎么做 我当前的代码如下所示 dummy data data lt data frame group sample c Direct Patient Care
  • OL3:强制重绘图层

    我目前正在将 OpenLayers 客户端版本 2 13 1 升级为新版本的 OpenLayers OL3 我的设置包括作为 WMS 映射服务器的 Mapserver 和前面提到的 OpenLayers 客户端 在旧系统中 我支持用户交互
  • R 中百分比格式表

    我想获取一个百分比表 将值格式化为百分比并以良好的格式显示它们 如果重要的话 我正在使用 RStudio 并编织为 PDF 我看过其他关于此的帖子 但它们看起来都不干净 而且效果不佳 例如 下面的 apply 语句确实采用百分比格式 但是
  • 检索两个字符之间的子字符串

    我有这样的字符串 var str it itA itB et etA etB etC etD 如何检索 和 之间的元素 截至目前 我正在用新行分割文本 但无法解决这个问题 请帮我解决这个问题 请使用这个小提琴http jsfiddle ne
  • IronPython - JSON 选择

    在 IronPython 2 0 1 中处理 JSON 的最佳方法是什么 原生 Python 标准库 json 看起来尚未实现 如果我想使用 Newtonsoft Json NET 库 我该怎么做 我可以将程序集添加到 GAC 但我还有其他
  • 如何使用 php 渲染远程图像?

    这是一个 jpg https i stack imgur com PIFN0 jpg 假设我希望这个渲染自 img php file name PIFN0 jpg 以下是我尝试完成这项工作的方法 样本 php p Here s my ima
  • UICollectionView 启用取消选择单元格,同时禁用 allowedMultipleSelection

    When collectionView allowsMultipleSelection YES 我可以取消选择已选择的单元格 when collectionView allowsMultipleSelection NO 我无法取消选择已选择
  • Fortran 中不提升数组的标量参数

    为什么 Fortran 会将标量表达式提升为数组表达 但不作为过程的参数 特别是 为什么标准机构做出这样的设计决定 仅仅是因为含糊不清 程序就应该超载吗 在这种情况下 错误消息是否可以作为替代方法 例如 在下面的代码中 最后一条语句 x f
  • Jsoup,在执行表单POST之前获取值

    这是我用来提交表单的代码 Connection Response res Jsoup connect http example com data id myID data username myUsername data code MyAu
  • iPhone:cocos2d 中相机跟随玩家

    我正在用 cocos2d 制作 iPhone 游戏 我想知道如何使相机 视图遵循特定的精灵 我会使用 CCCamera 类吗 是的 CCCamera 可以工作 然而 它有一些缺点 使其不适合某些用途 相对于该精灵移动图层以及所有其他对象可能
  • 在 StructureMap 中注册一个默认实例

    我有一堂课 MyService 具有静态属性 MyService Context 代表当前上下文 特定于当前登录的用户 因此它会发生变化 我想要实现的目标 ObjectFactory Initialize x gt x For
  • 在 WPF 中,我们如何将 Duration 定义为资源?

    我在许多动画中使用了一个持续时间 0 0 0 5 并且我想仅在一个位置定义该数字 我可以将双精度定义为
  • 在 Win32 API 中绘制格式化文本的最快方法是什么?

    我正在使用普通 Win32 API 在 C 中实现一个文本编辑器 并且我正在尝试找到实现语法突出显示的最佳方法 我知道有像 scintilla 这样的现有控件 但我这样做是为了好玩 所以我想自己完成大部分工作 我还希望它又快又轻 从我到目前
  • TensorFlow 中的高效图像膨胀

    我正在寻找一种有效的实施方式形态学图像膨胀 https en wikipedia org wiki Dilation morphology 在 TensorFlow 中使用方形内核 正如 OpenCV 所示 与实际效果相比 显而易见的方法似
  • 在 React.js 应用程序中从广告合作伙伴加载外部脚本

    我想在我的 React js Web 应用程序中包含两种类型的广告 div div 还有这个广告
  • SQL Server:返回字符串过程 INITCAP

    这就是我所做的 create proc INITCAP string varchar 30 as begin SET string UPPER LEFT string 1 LOWER RIGHT string LEN string 1 en
  • 使用 bootstrap 进行分位数回归的置信区间

    我正在尝试获取线性和分位数回归的五种引导区间 我能够使用 Boot from 引导并找到线性回归的 5 个引导区间 分位数 正常 基本 学生化和 BCa car和 boot ci 来自boot 当我尝试使用 rq 对分位数回归执行相同操作时
  • 使用 Entity Framework 4 时如何返回数据读取器?

    我想使用 LINQ 和 EntityFramework 上下文定义数据库查询 但我不希望返回实体 我想要一个数据读取器 我怎样才能做到这一点 这是为了将行导出到 CSV 干杯 伊恩 如果你需要这个 你很可能正在做一些意想不到的事情 通过查询
  • 理解声明 C 字符串的两种方法[重复]

    这个问题在这里已经有答案了 几周前 我开始学习编程语言 C 我了解 HMTL CSS Javscript PHP 和基本服务器管理等 Web 技术 但 C 语言让我感到困惑 据我了解 C 语言没有字符串数据类型 只有字符数据类型 但我可能是