我正在尝试将char的min值分配给char数组的变量,如此
char charchar_value[MAX_VARCHAR_LENGTH + 1]= CHAR_MIN;
它给了我这个错误"将'char'赋值给'char [513]'"
的不兼容类型答案 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()
会失败。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