Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么时候使用空字符,它做什么?_C++ - Fatal编程技术网

C++ 什么时候使用空字符,它做什么?

C++ 什么时候使用空字符,它做什么?,c++,C++,标题几乎说明了一切,但: 1.我正在阅读一篇关于字符序列的教程,遇到了一个我并不真正理解的部分。它们使用结尾处的空字符初始化字符数组,如下所示: char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' }; 然而,他们并没有进一步解释空字符(我也尝试过使用谷歌,但遗憾的是我没有找到我想要的答案)。教程说 按照惯例,以字符序列表示的字符串的结尾 由一个特殊字符表示:“空字符” 对我来说,这意味着“大多数时候但不是每次都使用空字符。” 所以我的第一个问题是-

标题几乎说明了一切,但: 1.我正在阅读一篇关于字符序列的教程,遇到了一个我并不真正理解的部分。它们使用结尾处的空字符初始化字符数组,如下所示:

char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
然而,他们并没有进一步解释空字符(我也尝试过使用谷歌,但遗憾的是我没有找到我想要的答案)。教程说

按照惯例,以字符序列表示的字符串的结尾 由一个特殊字符表示:“空字符”

对我来说,这意味着“大多数时候但不是每次都使用空字符。” 所以我的第一个问题是-什么时候使用空字符,什么时候知道是否必须显式输入它

二,。。我有以下代码:

char foo[22] = { 'H', 'e', 'l', 'l', 'o' };
cout << foo << endl;

charfoo[22]={'H','e','l','l','o'};

cout
'\0'
是空终止字符。如果没有这个,你将无法知道字符串何时结束。在你的例子中

char foo[22] = { 'H', 'e', 'l', 'l', 'o' };

char foo[22] = { 'H', 'e', 'l', 'l', 'o', '\0', '\0', ..., '\0' };
有17次
'\0'
。当您输出字符串时,可能会出现以下情况:

auto i = 0
do
{
    // Do smoething with foo[i++]
}
while('\0' != foo[i]);

“\0”
是空终止字符。如果没有这个,你将无法知道字符串何时结束。在你的例子中

char foo[22] = { 'H', 'e', 'l', 'l', 'o' };

char foo[22] = { 'H', 'e', 'l', 'l', 'o', '\0', '\0', ..., '\0' };
有17次
'\0'
。当您输出字符串时,可能会出现以下情况:

auto i = 0
do
{
    // Do smoething with foo[i++]
}
while('\0' != foo[i]);
什么时候使用空字符

每当需要以null结尾的字符串时。您可能会问,我什么时候需要以null结尾的字符串。无论何时,只要调用一个需要以null结尾的字符串的函数。函数是否需要以null结尾的字符串可以从函数的文档中找到。此类函数的示例有:
std::strlen(const char*)
运算符
什么时候使用空字符



每当需要以null结尾的字符串时。您可能会问,我什么时候需要以null结尾的字符串。无论何时,只要调用一个需要以null结尾的字符串的函数。函数是否需要以null结尾的字符串可以从函数的文档中找到。此类函数的示例有:
std::strlen(const char*)
操作符
char foo[22]={'H','e','l','l','o'}
最后有17个
'\0'
。这类问题最好用a来回答。简而言之,在c/c++中,通常在使用数组时必须指定数组的长度(考虑传递int[])。字符数组有一条捷径,在末尾使用
'\0'
,以避免需要长度
char
type是一个字节,空字符的值为0。因此,当分配char数组时,很可能所有字符都是空字符。但这并不能保证。因此,一个好的习惯是在结尾明确地指定一个空。一个C字符串总是以一个<代码> 0’< /Cord> @新晃结尾:“因此,当分配char数组时,很可能一切都是空字符。”——C++标准没有提出这样的要求。如果你分配一个数组,它的内容是不确定的。
charfoo[22]={'H','e','l','l','o'}
最后有17个
'\0'
。这类问题最好用a来回答。简而言之,在c/c++中,通常在使用数组时必须指定数组的长度(考虑传递int[])。字符数组有一条捷径,在末尾使用
'\0'
,以避免需要长度
char
type是一个字节,空字符的值为0。因此,当分配char数组时,很可能所有字符都是空字符。但这并不能保证。因此,一个好的习惯是在结尾明确地指定一个空。一个C字符串总是以一个<代码> 0’< /Cord> @新晃结尾:“因此,当分配char数组时,很可能一切都是空字符。”——C++标准没有提出这样的要求。如果分配数组,其内容是不确定的。可以使用尾随nul字符开发所有C
str.()
函数来计算C样式的字符串长度或停止其处理。您还可以提供nul char的另一种用法,例如在pascal样式的字符串中(由
std::string
使用)。您的
do
-
while
循环实际上应该是
while
循环。值得注意的是,编译器何时以及为什么会用与NUL字符等效的显式大小填充数组。您可以使用尾随NUL字符开发大约所有C
str…()
函数来计算C样式的字符串长度或停止其处理。您还可以提供nul char的另一种用法,例如在pascal样式的字符串中(由
std::string
使用)。您的
do
-
while
循环实际上应该是
while
循环。值得一提的是,编译器何时以及为什么会用与NUL字符等效的显式大小填充数组。感谢buddy,当然也感谢其他人,我将在稍后更仔细地研究您的答案,但他们也认为这“结果是:是字符串文字-但字符串文字和字符串常量不一样吗?并不是说我需要一个非常详细的例子等解释,但因为我真的认为它不值得开始一个新的线程。。。谢谢大家@NPP是的,C++标准没有提到字符串常量之类的东西,但我相信它是字符串文字的同义词。好的,谢谢!所以你不会真的介意使用字符串文字还是字符串常量,对吗?@npp我建议使用文字,因为它是正式的、明确的。但同样重要的是要知道,常数也可以是相同的意思,要理解别人。谢谢!但你会说“好吧,每当你调用一个需要以null结尾的字符串的函数时,不管函数是否需要nul