【问题标题】:assigning 0x00 to an array in C?将0x00分配给C中的数组?
【发布时间】:2015-02-06 21:59:08
【问题描述】:

我正在阅读他们的幻灯片:

int current = 0;
buffer[current]=0x00;

其中缓冲区只是一个字符数组char buffer[300];

如果 0x00 是 null 的表示,我们将其替换为 NULL buffer[current]=NULL 在编译时会出现以下错误:

assignment makes integer from pointer without a cast

有人能解释一下buffer[current]=0x00; 是什么意思吗?这会检查数组列表的结尾吗?

【问题讨论】:

  • 它将数组的第一个元素设置为“十六进制”0?
  • 那是我的猜测。
  • 不要将 NULL 指针与 NUL 字节混淆。它们听起来相似但又不同。
  • @Rizier123 当你可以分配 0 时为什么要使用十六进制?
  • 这里真正的问题是缓冲区是用来保存一个字符串,还是只是一个小整数数组。你没有提供足够的背景来回答这个问题。但是,使用0x00 来终止字符串是不寻常的。通常,使用字符常量'\0' 来终止字符串。

标签: c hex character-arrays


【解决方案1】:

NULL 是一个扩展为实现定义的空指针常量的宏。

这两个定义都对NULL有效:

#define NULL  0

#define NULL  ((void *) 0))

如果在你的编译器中使用了后者:

char buffer[300];
buffer[current]=NULL;

您的程序无效,因为您无法将指针值分配给整数对象。

((void *) 0) 是指针类型的值。使用0 或等效的十六进制值0x000 分配给整数对象。

【讨论】:

  • 所以0x00 将缓冲区设置为空?
  • 它设置为0。请注意,0 也是 ASCII 空字符的值,有时称为 NUL(而不是空或 NULL)。
  • 并且它不会将缓冲区设置为0,而是仅设置一个元素。 buffer[current] = 0; 将位置 currentbuffer 元素设置为 0
【解决方案2】:

我认为assignment makes integer from pointer without a cast 是 GCC 中的编译器警告,NULL 几乎是为 0x0 定义的:

#define NULL 0

#define NULL (void *)0

所以在后面的情况下,如果将 NULL 分配给整数而不是指针,则会在 GCC 中收到编译器警告。

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多