Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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++_C_Arrays_String_Char - Fatal编程技术网

C++ 我应该总是声明字符数组大于字符串吗?

C++ 我应该总是声明字符数组大于字符串吗?,c++,c,arrays,string,char,C++,C,Arrays,String,Char,所以我知道你应该声明字符数组比你想放在那里的单词大一个元素,因为\0必须在末尾,但是我不想用作单词的字符数组呢 我目前正在编写一个程序,其中存储了一组键盘字母,这些字母有一些指定的功能。是否仍应以\0结束此数组?这取决于使用情况。如果您不想将其仅用作字节数组,而是用作可能使用某些标准字符串算法(strcmp等)的c字符串,或者输出到流中,那么您的数组应该以\0结尾,这可能是不必要的 空终止符不是char数组的要求;这是对“C字符串”的一种要求,您打算将其用作单一的数据块,特别是当您打算将其传递给

所以我知道你应该声明字符数组比你想放在那里的单词大一个元素,因为
\0
必须在末尾,但是我不想用作单词的字符数组呢


我目前正在编写一个程序,其中存储了一组键盘字母,这些字母有一些指定的功能。是否仍应以
\0
结束此数组?

这取决于使用情况。如果您不想将其仅用作字节数组,而是用作可能使用某些标准字符串算法(
strcmp
等)的c字符串,或者输出到流中,那么您的数组应该以
\0
结尾,这可能是不必要的

空终止符不是
char
数组的要求;这是对“C字符串”的一种要求,您打算将其用作单一的数据块,特别是当您打算将其传递给C API函数时。这是确定字符串“长度”的常规方法

但是,如果您只想独立使用
char
s的集合,那么您自己就可以了


我们看不到您的代码,但在我看来,在这种情况下您似乎不想要或不需要它。

该数组的元素数至少应与您将放入其中的数据数相同。因此,如果:

  • 您不需要“\0”
  • 你不会把它放在那里的
  • 您不会使用依赖于“\0”的例程来告诉您数组大小

。。。如果使用C++,你最好不要使用尾随'\p>>p>,你应该只使用<代码> STD::String 或者<代码> STD::向量或者“<代码> STD::数组< /Cord>”,不必担心终结符。

< P>这取决于你正在尝试做什么,如果你正在尝试定义C风格字符串,那么,您需要终止符,因为如果您不

<>在C++中,字符串的大小已经存储在<代码> STD::String 类中,连同动态代码数组<代码> char < /C> >…< /P> 但是,如果您只需要一个免费的容器来存储字符,而不需要它来做类似C字符串的事情。。。您可以自由地执行以下操作:

char hello[128]; // 128 elements, do anything with them...
没有终结者


在您的情况下,您存储的是值,而不是创建字符串,并且您可能也不会将其视为字符串,因此在不使用空终止符的情况下执行,就足够了…

\0
在想要使用诸如
strlen
strcmp
之类的函数时,肯定会更容易使用,
strcat
等,但不是必需的


另一方面,我们有一个完整的企业代码库,它构建在字符串(字符数组)上,数据库中没有空终止符。只有当你打算把它作为C字符串使用时,

才是C和C++是不同的语言。选一个你用的,这个就在这里!OPS问题是C的一个有趣的问题,但是C++有更好的拟合和更具表现力的工具。<代码> STD::String < /Cord>作为C字符串的替换,当然。但是对于一个没有C字符串语义的简单的
char[]
,我想建议
std::array
(而noble)只移动目标柱。因为我们仍然要问最后一个元素是否应该为null,或者至少我们要问的程度与我们要问它关于
char[]
的程度相同。嗯,可能会少一点,因为它不会在没有您询问的情况下衰减为
char*
。@LightnessRacesinOrbit是的,我想如果OP要将这个数组传递给任何C字符串函数,使用标准容器至少会导致一个类型错误。我想这很公平