我試圖炭的最小值分配給類型char數組的這樣分配最小值爲char C++
char charchar_value[MAX_VARCHAR_LENGTH + 1]= CHAR_MIN;
它給我這個錯誤變量「不兼容的類型中的‘字符’的分配到「字符[513]」」
我試圖炭的最小值分配給類型char數組的這樣分配最小值爲char C++
char charchar_value[MAX_VARCHAR_LENGTH + 1]= CHAR_MIN;
它給我這個錯誤變量「不兼容的類型中的‘字符’的分配到「字符[513]」」
陣列對象的初始化需要使用支架初始化列表,即沿
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());
此動態分配的內存,雖然,即它並不完全等同。但是,除非有充分的理由否則,否則我會使用簡單的方法,只在必要時進行優化。
如果你只是想設置爲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));
Yikes! 'memset的()'?當然,你的意思是'std :: fill(std :: begin(charchar_value),std :: end(charchar_value),std :: numeric_limits);' – 2012-03-25 22:17:14
請告訴我你的舌頭藏在你的臉頰?您可能不喜歡這種風格,但是使用memset,CHAR_MIN或sizeof()並不存在任何內在錯誤或不安全因素。有些人喜歡更爲簡潔的語法會看到你的「更現代」的交叉例子,並且對你的保羅也有同樣的厭惡。 – phonetagger 2012-03-26 00:16:33
@phonetagger:不,我的意思是!如果可以採用更一般和安全的方法,爲什麼要教給任何人相當有限的方法(請參閱我的回答以供參考)。 – 2012-03-26 22:23:37
確定最小值和最大值在C以下數據類型++:
g) char
h) int
i) float
j) double
不必char類型的變量;你有一系列的字符。 – Mat 2012-03-25 21:29:45
這不是'char'變量,那是一個'char' **數組**變量。 – 2012-03-25 21:30:05
你想做什麼?就像現在這樣,你正在創建一個數組並試圖用'char'來初始化它。 – 2012-03-25 21:30:26