(這個問題都是關于理論的)。
快速懷疑,我不知道該怎么做:我需要做一個 malloc 來存盤它的長度加上 1 個零終止符的字串。因此我必須寫:char* str = malloc(length 1),為了避免緩沖區溢位/緩沖區溢位,我考慮過這個解決方案:
int sum = length 1;
if (sum > char storage limit) {
exit(1);
} else {
char* str = malloc(length 1);
NULL POINTER EXCEPTION CHECK.
}
好的,這可以作業,但我不知道我應該寫什么而不是“char storage size”。
知道char的取值范圍是-128<char<255,char的存盤大小是1位元組,但是我不能寫8,因為8不代表8位;我該怎么做?
編輯:也許,我可以這樣使用 sizeof 運算子:sizeof(char)。代碼將變為:
int sum = length 1;
if (sum > sizeof(char)) {
exit(1);
} else { /* same way */ }
但是由于這種整數型別是機器相關的,它們的存盤大小可能會有所不同,因此我認為我應該寫 int8_t,因為 stdint 函式總是具有相同的存盤大小。你怎么看?
uj5u.com熱心網友回復:
您錯誤地理解了編譯器訊息。
首先是編譯錯誤
if (sum > )
^^^
并且編譯器指向它。
其次,該訊息意味著您應該使用 type而不是int變數的型別。lengthsize_t
此訊息與緩沖區溢位沒有任何共同之處。這意味著運算式length 1可能導致整數溢位。
注意一點sizeof( char ),sizeof( signed char )永遠sizeof( unsigned char )等于1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425197.html
上一篇:非賦值加法后C指標改變
下一篇:如何在C中解釋對指標的賦值
