身份证明:这是一个字符串吗?

时间:2015-12-30 17:20:08

标签: c arrays string char

我不知道那是一个字符串还是数组......

char str4[100] = { 0 };

那段代码是字符串?

如果是,它打印什么?

4 个答案:

答案 0 :(得分:3)

  

我不知道那是一个字符串还是数组......

绝对是一个阵列。它也可以是一个字符串,因为字符串是由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.
{
}

答案 1 :(得分:2)

str4是一个char的数组,所以是的:它可以是一个字符串。您正在将其初始化为{0}。这意味着数组中的第一个元素被初始化为终止的nul字符(字符串的结尾),结果是:str4是一个有效的,尽管是空的字符串。隐含地,数组的其余部分将初始化为0,BTW也是如此。

打印此字符串与打印空字符串相同:

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];

只是因为具有静态存储的对象被初始化为其nul值(整数兼容类型被初始化为0,指向NULL):

  

如果没有显式初始化具有静态存储持续时间的对象,则会隐式初始化它,就好像每个具有算术类型的成员都被赋值为0,并且每个具有指针类型的成员都被赋予空指针常量。

无论哪种方式,简短的回答是: str4是一个空字符串。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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