c語言資料溢位怎麼辦,c語言中溢位如何處理

時間 2023-03-08 22:25:02

1樓:匿名使用者

c語言的強大之處就在於他的靈活性,程式設計師自己把握。編譯器可以幫助預防錯誤,但有些程式會利用溢位,所以溢位不完全是錯誤的事情。

1、溢位:資料型別超過了計算機字長的界限而出現的資料溢位;

2、溢位可能原因:

當應用程式讀取使用者資料,複製到應用程式開闢的記憶體緩衝區中,卻無法保證緩衝區的空間足夠時 (假設定義陣列int array[10], 而在呼叫時使用array[11] 或存放的資料超過int型別容量等), 記憶體緩衝區就可能會溢位。

3、溢位因素分析:

由於c/c++語言所固有的缺陷,既不檢查陣列邊界,又不檢查型別可靠性,且用c/c++語言開發的程式由於目標**非常接近機器核心,因而能夠直接訪問記憶體和暫存器,只要合理編碼,c/c++應用程式在執行效率上必然優於其它高階語言。然而,c/c++語言導致記憶體溢位問題的可能性也要大許多。

2樓:哈士奇去上學

這個問題就好比:我感冒了怎麼辦?

我的意思是,你要做的就是防止資料溢位。在為資料賦值的時候,要記住這個型別容納的資料的上下限,在使用字串的時候,記住為末尾的'\0'字元留個一個字元的位置,等等。

這應該是自然反應,但這個過程需要慢慢積累,所以,多寫**是有好處的。

3樓:匿名使用者

顯然對於比較大的a,這個數字c是個很大的數字,所以你不能用自帶的資料型別,長整型也不夠用。你需要自己定義陣列,將每一位數字存到一個單元裡面,但是相應地,做加減乘除計算的部分你也要自己寫,不會的話,你可以搜尋一下陣列的加減乘除運算,應該可以搜到相關的演算法。

4樓:匿名使用者

經測試,程式是沒有錯的。但是輸入的a不能太大了。

我輸入5,結果就已經是114了,所以不能輸入太大的數。

c語言中溢位如何處理

5樓:孫永超

c 中呼叫積運算子之後做溢位檢測已經太晚,但呼叫和運算子之後做檢測則一點也不遲,所以你可以通過對和運算結果的檢測實現能檢測溢位的積運算,因為 a * b 既是 a 個 b 的和:

-5000000 * 1374389539 等於 -(5000000 * 1374389539)。括號裡是 5000000 個 1374389539 的和。

我把能檢測溢位的和運算包在 add( )裡,然後在 multiply( )裡重複呼叫 add( )

add( )怎麼檢測溢位?

和運算的結果若溢位將導致數值的環繞。上溢導致往下環繞,下溢導致往上環繞。

邊界狀況:(1)最輕微的上溢是 int_max + 1 :結果是 int_min。

(2)最嚴重的上溢是 int_max + int_max :結果是 -2。

(3)最輕微的下溢是 int_min - 1 :結果是 int_max。

(4)最嚴重的下溢是 int_min - int_min :結果是 0。

結論:(1)所有上溢結果都小於任何一個運算元。

(2)所有下溢結果都大於任何一個運算元。

所以 add( )可以用結果和任意選定的一個引數判斷溢位,並以落選的引數判斷溢位的方向。

add( )無法以返回值舉報溢位,所以採用 strtol( )的舉報方法。

不同於 strtol( )的是,若沒有溢位,add( )會把 0 賦值給 errno。

multiply( )在這方面跟 add( )一樣。

當然,應付溢位的最佳方法還是防範:充分了解資料的範圍,選擇恰當的變數型別。

6樓:網友

你說的溢位是什麼意思?

是指設定的數值超過了,該資料型別所代表的最大值嗎?

c語言中各個型的資料的溢位是什麼樣的?

7樓:岑志文全素

1.溢位:資料型別超過了計算機字長的界限而出現的資料溢位;

2.溢位可能原因:

當應用程式讀取使用者資料,複製到應用程式開闢的記憶體緩衝區中,卻無法保證緩衝區的空間足夠時。

(假設定義陣列int

array[10],而在呼叫時使用array[11]

或存放的資料超過int型別容量等),記憶體緩衝區就可能會溢位。

3.溢位因素分析:

由於c/c++語言所固有的缺陷,既不檢查陣列邊界,又不檢查型別可靠性,且用c/c++語言開發的程式由於目標**非常接近機器核心,因而能夠直接訪問記憶體和暫存器,只要合理編碼,c/c++應用程式在執行效率上必然優於其它高階語言。然而,c/c++語言導致記憶體溢位問題的可能性也要大許多。

4.對於堆疊溢位,程式會直接終止,返回錯誤。

對於陣列型別的邊界越界溢位,有時會產生中斷錯誤,有時仍然可以繼續執行,但是結果不正確。

對於基本型別的最大值溢位,會產生不確定的結果,程式仍然能夠正常執行,但是結果不正確。

c語言中怎麼用,C語言中 怎麼用

按位與 屬於位操作 一般用在取記憶體中特定位的值 如有 11111111 我要取其中從左起第三位的值,就用它按位與 00001000 關於 位操作的技巧還有很多,你可以去自己搜一下還有一個應用就是用於關係運算中,如 有兩小段程式 sample 1 int main cout sample 2 int...

c語言中怎麼表示,C語言中 怎表達?

四舍 入 標準的c語言中沒有 這個符號及常量,一般在開發過程中是通過開發人員自己定義這個常量的,最常見的方式是使用巨集定義 define pi 3.141592 也可以直接普通變數定義,如 double pi 3.141592 可以負責任的告訴你,c99標準裡沒提這事,但大部分實現裡 vs和gcc ...

c語言,c語言,C語言中 與 的區別

第4題 include using namespace std void main else 這兒是隨機生成 else 這兒是隨機生成 int main 第7題 include strinv char str str n 0 int main 本來想幫你全做的,不過6,7好像有人做了,那就幫你做了4...