将min值赋给char C ++

时间:2012-03-25 21:28:36

标签: c++ char variable-assignment min

我正在尝试将char的min值分配给char数组的变量,如此

char charchar_value[MAX_VARCHAR_LENGTH + 1]= CHAR_MIN;

它给了我这个错误"将'char'赋值给'char [513]'"

的不兼容类型

3 个答案:

答案 0 :(得分:1)

如果您只想将第一个元素设置为CHAR_MIN,那么它将是:

char charchar_value[MAX_VARCHAR_LENGTH + 1] = { CHAR_MIN };

如果要将整个数组初始化为CHAR_MIN,那么它将是:

char charchar_value[MAX_VARCHAR_LENGTH + 1];

memset(charchar_value, CHAR_MIN, sizeof(charchar_value));

答案 1 :(得分:1)

数组对象的初始化需要使用大括号初始化列表,即

char charchar_value[MAX_VARCHAR_LENGTH + 1] = { val_0, val_1, /*...*/ val_n };

这会将第一个n值初始化为各自的值,将所有其他值初始化为零。这不是你想要的。设置数组中值的唯一方法是在初始化之后,使用例如std::fill()

std::fill(std::begin(charchar_value), std::end(charchar_value),
          std::numeric_limits<char>::min());

由于还有另一个建议建议使用基本上是C的方法:

  • memset()的使用仅限于没有任何C ++功能的类型(就像char的情况一样),并且当将值设置为0以外的其他值时,它很漂亮仅限于char(是的,我意识到有些情况下它仍然有效)。另一方面,std::fill()适用于任何类型的CopyAssignable以及赋予相应类型对象的任何值。
  • 虽然在这种情况下sizeof()的使用工作,但是当大小变为动态时它将不起作用,但编译器仍然会愉快地接受代码。获取指针的std::begin()std::end()会失败。
  • 在类型不完全清楚的情况下,例如当它是typedef或在模板中时,std::numeric_limits<T>::min()有更好的工作机会。它仍然不适用于许多类型,因为没有定义min()但范围更大。

所有这一切,我只会使用一个合适的类来直接进行初始化,即

std::vector<char> charchar_value(MAX_VARCHAR_LENGTH + 1,
                                 std::numeric_limits<char>::min());

但是,这会动态分配内存,即它并不完全等效。但是,除非有充分的理由不这样做,否则我会使用简单的方法,只有在必要时才进行优化。

答案 2 :(得分:-1)

确定C ++中以下数据类型的最小值和最大值:

g)  char
h)  int
i)  float
j)  double