【问题标题】:what is "{0}" in C?C 中的“{0}”是什么?
【发布时间】:2011-08-15 11:17:40
【问题描述】:

char buf[MAXDATASIZE] = { 0 };{0} 是什么意思?

试图打印出来,但什么也没打印出来。

#include <stdio.h>

int main(void)
{
        char buf[100] = { 0 };
        printf("%s",buf);
        return 0;
}

【问题讨论】:

  • 它是 通用零初始化器 :) 它适用于(它设置为零,正确的零)任何(用于初始化)int k = {0}; char *data = {0}; _Complex double x = {0}; struct whatever array[42] = {0}; /* ... */

标签: c


【解决方案1】:

这只是一个数组的初始化列表。所以它很像正常的语法:

char buf[5] = { 1, 2, 3, 4, 5 };

但是,C 标准规定,如果您没有在初始化列表中提供足够的元素,它将默认初始化其余的元素。所以在你的代码中,buf 的所有元素最终都会初始化为0

printf 不显示任何内容,因为buf 实际上是一个零长度字符串。

【讨论】:

  • 所以... 明确声明第一个字符将是0,而其他字符将默认0char buf[100] = {65, 66, 67}; 会将buf 初始化为将'A''B''C' 作为前三个元素,而所有其他元素将默认0char buf[100]; 是否会未初始化,即它是否包含意外值(在保留之前写入内存的任何内容)?
  • @binaryLV:是的,你说的一切都是正确的。唯一的例外是,如果您将char buf[100]; 写为全局或静态,它将被初始化为零(在所有其他上下文中,它不会被初始化)。
【解决方案2】:

您正在为缓冲区分配一个数组。

在字符串的特殊情况下,通常ASCII值为0的字符终止字符串。

例如,如果您想在字符串中放入一个读取“Hello world”的字符串,您可以这样做

char buf[100] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0};

char buf[100] = "Hello world";

无论如何,您的代码什么都不会打印,因为您试图打印一个长度为零的字符串,即一个空字符串。

【讨论】:

  • 0"\0" 几乎完全相同。第一个是从int转换成char;第二个是 2 个字符的数组,它们都具有相同的零值。这里不存在可移植性问题。
猜你喜欢
  • 2011-03-26
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多