【问题标题】:How to use default values in a char array?如何在 char 数组中使用默认值?
【发布时间】:2015-01-31 21:58:30
【问题描述】:

我有一个最简单的问题:如何在 C 中初始化一个值? 我的变量是 char[20] 类型的,它是在我的单元之外的某个地方声明的。无法更改类型。

现在我想给它一个默认值,假设所有空字符(或空格等),但这根本不起作用。 我已经试过了:

方法一。

host = "";

=> 无法从 'const char [1]' 转换为 'char [20]'

方法二。

host = "                   ";

=> 无法从 'const char [20]' 转换为 'char [20]

方法3。

host = '                   ';

=> 无法从 'int' 转换为 'char [20]

方法4。

host = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", };

=> 语法错误:'{'

...

我在这里感到绝望:C 的发明者如何以及为什么让简单地为变量声明一个值变得如此困难:-(?

【问题讨论】:

  • 你有没有试过用谷歌搜索“c char array initialize”? stackoverflow.com/questions/18688971/…
  • 你是如何声明host的?
  • 你不使用单引号作为字符吗?另外,如果你想填充数组,你必须在声明变量时这样做。否则,您必须更改每个单独的元素。
  • 显示你的源代码的相关部分

标签: arrays c syntax-error default-value


【解决方案1】:
memset(&host, 0, sizeof(host));

将用零填充它。

【讨论】:

  • 我刚刚使用了这个“memset”命令,它工作正常。谢谢!
【解决方案2】:
host = "";

仅当它是 char* 而不是 char[20] 时才有效(如果您正在执行一个函数,只需创建参数 char*)。

host = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", };

没关系,但是先用

{'字符', '字符','字符'...

(将字符替换为ASCII的任意字符,例如\0)。

其次(这是这里的主要问题)你有一个不应该在的地方(最后,所以删除它)。

【讨论】:

    【解决方案3】:
    1. 你知道initialize的含义吗?通常,它只在定义的时间执行。
    2. declared somewhere outside of my unit,还是说defined

    如果host在别处真的是declared,而defining它,你可以使用

    char host[20] = {0};   //to fill with 0
    

    char host[20] = { [0 ... 19] = 5 };  //to fill with 5 , supported on gcc
    

    在以后的任何时候,如果您想将re-initialize 设置为某个值,memset() 是您的最佳选择。查看手册页here

    【讨论】:

    • char host[20] = { 5, }; 将把5 放在数组的第一个位置,并用零完成其余部分。
    • @axiac 我的坏!不知道我是怎么错过的。抱歉,感谢您引起注意。使用预期代码更新。
    • 不错的技巧,但如果host 是一个字符串(不是小整数数组),我建议[0 ... 18] = '5'; 后跟host[19] = '\0'
    • @AlterMann 感谢先生扩大我的回答范围。
    【解决方案4】:

    我认为您已将主机变量声明为整数变量。如果您已将其声明为 char 变量,

    host = "";
    host = "     ";
    

    这两个是可能的。因为它会取对应的字符 位置。

    host = ' '; 这是不可能的,因为在单引号中我们必须只给出字符。在此您必须提及数组位置,否则会引发错误。 主机[0]=' ';

    host = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", };
    

    这是不可能的,因为在这种情况下,它将采用相应的字符而不是字符串。

    【讨论】:

      猜你喜欢
      • 2016-06-07
      • 2015-02-20
      • 2012-09-26
      • 1970-01-01
      • 2016-07-24
      • 2012-08-01
      • 2014-01-17
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多