【问题标题】:Identification: Is that a string?识别:那是一个字符串吗?
【发布时间】:2015-12-30 17:20:07
【问题描述】:

不知道是字符串还是数组...

char str4[100] = { 0 };

那个代码是一个字符串?

如果是,它打印什么?

【问题讨论】:

  • 是的,它是一个字符串。它是空的,因为第一个字符是 null。
  • 在 C 中,“字符串”是一个以 NUL 结尾的字符数组。这有帮助吗?
  • C 没有字符串类型。并且没有调用输出函数,所以它不打印任何东西。

标签: c arrays string char


【解决方案1】:

不知道是字符串还是数组...

绝对是一个数组。它也可以是字符串,因为字符串是由 C 中的空字符终止的字符数组。

您可以将其用作数组:

char str4[100] = { 0 };
str4[0] = 'a';

您也可以将其用作字符串:

if ( strcmp(str4, "ABC") == 0 )
{
   // This string contains "ABC"
}

当字符数组不是字符串时

您可以创建一个不能像字符串一样使用的字符数组。

char str[4] = { 'a', 'b', 'c', 'd' };
if ( str[0] == 'a' ) // OK
{
   // Do something
}

if ( strcmp(str, "ABC") == 0 ) // Problem. str does not have a null character.
                               // It cannot be used like a string.
{
}

【讨论】:

    【解决方案2】:

    str4char 的数组,所以是的:它可以是一个字符串。您将其初始化为{0}。这意味着数组中的第一个元素被初始化为终止 nul 字符(字符串的结尾),结果是:str4 是一个有效的,尽管是空的,字符串。顺便说一句,数组的其余部分也将被初始化为 0。

    打印这个字符串和打印一个空字符串是一样的:

    printf("");
    

    您发布的代码完全与此相同:

    char str4[100] = "";
    //or this
    char str4[100] = {0, 0, '\0'};//'\0' is the same as 0
    //or even
    char str4[] = {0, 0, ..., 0};//100 0's is just a pain to write...
    

    或者,如果是全局变量:

    char str4[100];
    

    仅仅是因为具有静态存储的对象被初始化为它们的空值(整数兼容类型被初始化为0,指向NULL的指针):

    如果一个具有静态存储持续时间的对象没有显式初始化,它会被隐式初始化,就好像每个具有算术类型的成员都被分配了 0,而每个具有指针类型的成员都被分配了一个空指针常量。

    不管怎样,简短的回答是:str4 是一个空字符串。

    【讨论】:

    • 在 C 中,全局变量被初始化为零。没有别的了。
    • @ouah:Nips,我在考虑静态存储。我的错,将编辑
    • " str4chars 的数组,所以是的:它是一个字符串" 作为一个数组并不能使它成为一个字符串。它必须有 nul。
    • @Turn 不同意“全局变量初始化为零。没有别的”的后半部分。 static 没有显式初始化的函数的局部变量就像全局变量一样被初始化。
    • 是的,我知道有人会在这件事上叮嘱我。我认为它们是全局变量,只能被声明它们的函数访问。
    【解决方案3】:

    根据 C 中的定义,字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。所以这里你的数组也代表一个长度为0的字符串。

    【讨论】:

      【解决方案4】:

      在 C 中,字符串只是遵循特定约定的字节数组,即字节数组以空字符终止。在这种情况下,如果您尝试使用类似printf 的内容打印str4,您会发现它看起来像一个空字符串,因为第一个字节是一个空字符,它会立即终止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        相关资源
        最近更新 更多