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...