我不知道那是一个字符串还是数组......
char str4[100] = { 0 };
那段代码是字符串?
如果是,它打印什么?
答案 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
的字符串。