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

时间:2018-12-07 13:08:24

标签: c++ c arrays string char

所以我知道您应该将char数组声明为比要放置的单词大一个元素,因为\0必须在末尾,但是char数组呢?想用作文字吗?

我目前正在编写一个程序,其中存储了一组分配有某些功能的键盘字母。我是否还应该使用\0结束该数组?

6 个答案:

答案 0 :(得分:7)

那可能没有必要。

char数组不需要空终止符;它是“ C字符串”的要求,您打算将其用作数据的单一Blob,尤其是如果您打算将它们传递给C API函数。确定字符串的“长度”是常规方法。

但是,如果您只想单独使用char的集合,那就把自己淘汰掉。

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

答案 1 :(得分:5)

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

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

...您可以不用尾随'\ 0'

答案 2 :(得分:4)

如果您使用的是C ++,则可能应该只使用std::stringstd::vector<char>甚至是std::array<char>,而不必担心终止符。

答案 3 :(得分:3)

这取决于用法。如果您不希望将其用作字节数组,而是用作c字符串,并可能使用某些标准字符串算法(strcmp等),或者将其输出到流中,则您的数组应以{{1 }}。

答案 4 :(得分:1)

这取决于您要执行的操作,如果要定义 C风格的字符串,则需要终结符,因为C库将无法计算字符串的大小还有其他东西 ...

但是,在C ++中,字符串的大小已经与std::string s的动态数组一起存储在char类中。

但是,如果您只需要一个免费的容器来存储字符,而无需使用它来做类似字符串的事情……您可以自由地这样做:

char hello[128]; // 128 elements, do anything with them...

没有终结者...

在您的情况下,您正在存储值,而不是创建 string ,并且您也可能不会将其视为字符串,因此请没有空终止符就足够了...

答案 5 :(得分:0)

\0当然可以简化使用strlenstrcmpstrcat之类的功能时的操作,但不是必需的。

撇开-我们拥有基于字符串(字符数组)构建的整个企业代码库,数据库中没有空终止符。效果很好。