C++ C++;:如果数组中的任何其他字符前面有一个空字符怎么办?
如果我们正在输出所述数组,并且第一个字符是\0,那么它只是被忽略了,并且下一个非空字符被视为第一个字符吗?默认情况下,C样式的字符串是哨兵字符数组,这意味着它们在\0(或某种形式的空)的第一次出现时终止,因此它不应该被忽略。它应该终止字符串,将其视为空字符串。默认情况下,C样式的字符串是哨兵字符数组,这意味着它们在\0(或某种形式的null)第一次出现时终止,因此不应忽略它。它应该终止字符串,将其视为空字符串。取决于“输出”函数……如果它知道数组的长度,它可以输出每个元素,而不考虑值。大多数使用“C字符串”的函数将在第一次\0时停止 取决于“输出”函数……如果它知道数组的长度,它可以输出每个元素,而不考虑值。大多数使用“C字符串”的函数将在第一次\0时停止 按照惯例,如果“C字符串”(读取C++ C++;:如果数组中的任何其他字符前面有一个空字符怎么办?,c++,arrays,c-strings,C++,Arrays,C Strings,如果我们正在输出所述数组,并且第一个字符是\0,那么它只是被忽略了,并且下一个非空字符被视为第一个字符吗?默认情况下,C样式的字符串是哨兵字符数组,这意味着它们在\0(或某种形式的空)的第一次出现时终止,因此它不应该被忽略。它应该终止字符串,将其视为空字符串。默认情况下,C样式的字符串是哨兵字符数组,这意味着它们在\0(或某种形式的null)第一次出现时终止,因此不应忽略它。它应该终止字符串,将其视为空字符串。取决于“输出”函数……如果它知道数组的长度,它可以输出每个元素,而不考虑值。大多数使用
char
array)使用“string ish”方法处理字符串,它将在第一个ASCII零处停止(长度参数被视为“最多”长度)。如果它使用“array ish”方法,它将把一个长度参数视为一个“精确”的长度,并为循环从零迭代到该大小。后者通常可以在二进制处理中找到,而前者是char
数组的字符串处理约定
C标准头中的示例是二进制数组的memxyz
函数,而不是字符串的strnxyz
函数。按照惯例,如果“C字符串”(读取char
数组)使用“string ish”方法处理字符串,它将在第一个ASCII零处停止(长度参数被视为“最多”长度。如果它使用“数组ish”方法,它会将长度参数视为“精确”长度,并将循环从零迭代到该大小。后者通常可以在二进制处理中找到,而前者是char
数组的字符串处理约定
C标准头中的示例是用于二进制数组的memxyz
函数,而不是用于字符串的strnxyz
函数。你知道,你可以试试看。这比问问题和等待回答更快。@NathanOliver我问了,我只是想看看我是对还是错了。“我做了。。。“-你的观察和结论也属于你的问题。您的答案完全取决于所执行的输出是否需要以nulchar结尾的字符序列(也称为C字符串)。你在标记列表中包含了这个名字,但在你的问题中没有提及。你是如何输出数组的?@Bluasul那么,从逻辑上讲,如果函数跳过第一个字符,你会如何表示一个空字符串?转到下一个角色?如果第二个字符是\0
?转到下一个角色?如果那是\0
?看看这是怎么回事?你不可能有一个空字符串,否则打印函数可能会在never-never-land中查找第一个非空字符。你知道你可以试试看。这比问一个问题并等待回答要快得多。@NathanOliver我问了,我只是想看看我是对的还是做错了什么。“我做了…”-你的观察和结论也属于你的问题。您的答案完全取决于所执行的输出是否需要以nulchar结尾的字符序列(也称为C字符串)。你在标记列表中包含了这个名字,但在你的问题中没有提及。你是如何输出数组的?@Bluasul那么,从逻辑上讲,如果函数跳过第一个字符,你会如何表示一个空字符串?转到下一个角色?如果第二个字符是\0
?转到下一个角色?如果那是\0
?看看这是怎么回事?你不可能有一个空字符串,否则print函数可能会在never-never-land中查找第一个非空字符。只有C字符串是这样的。在其他类型的数组中,0
没有什么特别之处。只有C字符串是这样的。在其他类型的数组中,0
没有什么特别之处。