使用 (char *)malloc(0) 和 NULL 初始化字符串之间的区别

2023-12-05

为什么分配 0 大小char块在这种情况下有效吗?但如果我写char *string = NULL;这是行不通的。

我正在使用 Visual Studio。

int main()
{   
    char *string = (char *)malloc(0);
    string[0] = 'a';
    string[1] = 'b';
    string[2] = 'c';
    string[3] = 'd';
    string[4] = '\0';

    printf("%s\n",string);
    return 0;
}

首先我要声明的是,根据man page of malloc()

The malloc()函数分配 size 字节并返回指向已分配内存的指针。内存未初始化。如果大小为 0,则malloc()返回NULL,或稍后可以成功传递给的唯一指针值free().

像这样的电话malloc(0) is valid本身,但是接下来,我们需要检查返回的指针的有效性。它可以

  • Return NULL
  • 返回一个可以传递给的指针free().

但无论如何,不​​允许取消引用该指针。它会导致内存访问越界并导致未定义的行为.

也就是说,有两件重要的事情要提,

  1. Please 看看为什么不投射返回值malloc()和家人在C.

  2. 请检查返回值malloc()在使用返回的指针之前。

所以,为了回答你的问题,

初始化字符串与(char *)malloc(0)和空

不使用malloc(0)在这种情况下,作为对指针的 N​​ULL 检查may失败,给人留下错误的印象valid将内存分配给指针。总是使用NULL用于初始化。

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

使用 (char *)malloc(0) 和 NULL 初始化字符串之间的区别 的相关文章

  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • Matlab中反转一位逻辑位

    是否存在更好的方法来反转 X 的元素 gt gt X dec2bin 10 X 1010 我这样做了 x i num2str 1 str2num x i 如果我理解正确的话 你想将一位设置为 1 使用bitset bitset x bitN
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • java中的html截断器

    是否有任何实用程序 或示例源代码 可以在 Java 中截断 HTML 用于预览 我想在服务器上而不是在客户端上进行截断 我正在使用 HTMLUnit 来解析 HTML UPDATE 我希望能够预览 HTML 因此截断器将保持 HTML 结构
  • Pytorch 张量 - 如何通过特定张量获取索引

    我有一个张量 t torch tensor 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 和一个查询张量 q torch tensor 1 0 0 0 有没有办法获取索引q like indexes t index q g
  • 从 Cordova Capture 获取音频数据的 base64

    我正在使用 ngCordova Capture 通过录制音频并将 Base64 发送到某处 通过 REST 来编写此代码 我可以让捕获音频工作 但是一旦它返回audioURI 我就无法从文件系统获取base64 的数据 我的代码如下 cor
  • 无法解析 org.springframework.transaction.annotation.Transactional 的依赖关系

    我是基于注释的编程的新手 不知道要添加到我的 pom xml 中的 Maven 工件org springframework transaction annotation Transactional 我用谷歌搜索 如搜索结果的前 5 页 但无
  • 安装 Graphviz 2.38 后出现“运行时错误:确保 Graphviz 可执行文件位于系统路径上”

    我下载了Graphviz 2 38MSI 版本并安装在文件夹下C Python34 然后我跑pip install Graphviz 一切顺利 在系统路径中我添加了C Python34 bin 当我尝试运行测试脚本时 filename do
  • 从 sns.kdeplot 中提取数据

    是否可以从a中提取数据sns kdeplot 在策划之前 IE 不使用该功能y get lines 0 get data 后绘图 这可以通过从 matplotlib Axes 对象中提取线条数据来完成 import numpy as np
  • 从 x86 CPU 生成 64 字节读取 PCIe TLP

    将数据写入 PCIe 设备时 可以使用写入组合映射来提示 CPU 应生成针对该设备的 64 字节 TLP 是否可以对读取做类似的事情 以某种方式提示 CPU 读取整个缓存行或更大的缓冲区 而不是一次读取一个字 英特尔有关于从视频 RAM 复
  • Codeigniter GROUP_CONCAT

    I have this gt db gt select GROUP CONCAT prod poster poster2 poster3 poster4 poster5 poster6 poster7 我对此有错误并显示 sql 查询 SE
  • 在mysql的列底部显示总和

    除了使用 Union 查询之外 是否还有其他方法 而不是使用以下查询来显示底部列的总和 select amount from receipt UNION select SUM amount from receipt 带汇总应该完全执行您正在
  • 按Json对象中的某些字段排序

    我有一个 Json 文件 其中包含对象数组 例如 tId Something StartTime 05 29 2013 5 28 33 PM CompleteTime 05 29 2013 5 28 33 PM Status success
  • 在地图上显示多个标记及其自己的信息窗口

    我需要在地图上显示多个标记 每个标记都有自己的 信息窗口 我已经毫无问题地创建了单独的标记 但不知道如何为每个创建信息窗口 我正在基于 ASP 的网站中使用 V3 API 生成地图 从一组数据库记录创建标记 标记是 通过循环 rs 并使用以
  • 使用 jQuery 替换 H3 标题中的文本

    我试图使代码尽可能简单 干净 两个 DIV 内有一个 h3 顶部 DIV 有一个 ID 内部 DIV 有一个唯一的类 Events event header h3 html your new header 我也尝试过 Events even
  • html 键码在 Firefox 中不起作用

    我有以下代码 function noNumbers e var charCode e which e which e charCode e charCode e keyCode e keyCode 0 if charCode lt 48 c
  • 无法使用 Python、Selenium 启动 Tor:Tor 无法启动 [重复]

    这个问题在这里已经有答案了 该程序应该使用 selenium 打开 Tor 但是当我启动它时 它出现错误 Traceback most recent call last File c Users Seya F ssler Desktop P
  • 计时器开始时间和结束时间计算额外提供 4 秒

    我正在开发 WP8 我正在使用计时器来计算总时间 这就是我正在做的 timer new DispatcherTimer timer Interval TimeSpan FromSeconds 1 interval for timer is
  • 删除文件 A 中位于文件 B 中的行

    我有两个大文件A和B 我需要从文件A中删除文件B中出现的行并保存结果 至文件 C 我努力了comm 23 file1 file2 但它需要排序来保存结果 我需要文件 C 而不排序 任何建议 Edit 文件 B 的样本
  • 使用 PHP 代码将 mysql 表导出为 CSV

    我有一个名为 pvdata 的 sql 表 我想将其导出到 csv 文件 但我得到以下结果而不是正常的表格 br font size 1 table class xdebug error xe notice border 1 cellspa
  • 更改wpf中的按钮边框厚度?

    为什么Button的边框粗细没有改变 如果我将边框厚度更改为 1 或 100 则没有关系 一样的 我想用它来改变它Style not 自定义模板
  • 将 postman api 调用转换为 Node.js 调用

    当尝试向使用 swagger 2 0 不是我 创建的 API 发出发布请求时 我遇到了一些麻烦 我已将集合导入邮递员 当我执行发布请求时 它工作得非常完美 然而 在 Node js 中 使用 swagger 库会输出 400 错误 使用 a
  • 使用 (char *)malloc(0) 和 NULL 初始化字符串之间的区别

    为什么分配 0 大小char块在这种情况下有效吗 但如果我写char string NULL 这是行不通的 我正在使用 Visual Studio int main char string char malloc 0 string 0 a