c語言輸出笑臉( 1 )

2021-07-29 15:29:20 字數 858 閱讀 7061

參考部落格strlen()函式的實現原理

就如上圖,在程式編譯執行之後,輸出了笑臉符號,可是在別人的電腦中又沒有顯示出這個錯誤。也就是說同樣的**,同樣的編譯器,卻顯示不同的內容。

- 笑臉:』\1』 (有的編譯器是顯示空格或者乙個正方形框)

- 縮寫/字元:soh(start of headline)

- 解釋:標題開始

經過google,發現是因為strlen函式的原理導致了這種數值溢位的現象。

strlen函式的實現原理類似這個:

#include 

size_t strlen( char *string )

兩點注意:

在指標到達字串末尾的nul位元組之前,while語句中*string++表示式的值一直為真。它同時增加指標的值,用於下一次測試。這個表示式甚至可以正確地處理空字串。

如果這個函式呼叫時傳遞給它的是乙個null指標,那麼while語句中的間接訪問將會失敗。函式是不是應該在解引用指標前檢查這個條件?從絕對安全的角度講,應該如此。但是,這個函式並不負責建立字串。如果它發現引數為null,它肯定發現了乙個出現在程式其他地方的錯誤。 當指標建立時檢查它是否有效是合乎邏輯的,因為這樣只需檢查一次。這個函式採用的就是這種方 法。如果函式失敗是因為粗心大意的呼叫者懶得檢查引數的有效性而引起的,那是他活該如此。

所以,使用strlen()函式之前一定要確保字串不為null。而字串的儲存方式跟乙個char型陣列類似。

所以在用strlen函式的時候,要確保該陣列或者字串有結束標誌』\0』

C語言 輸出

用fputs 把乙個字串寫入到檔案中 int fputs char string,file fp 功能 把字串string寫入到檔案fp中 若fp為stdout,則為向螢幕輸出。int printf char const format,int fprintf file fp,char const f...

c語言輸出日曆

include void main else sum sum 365 按照capucivar的思路,接下來要計算從該年1月到使用者輸入月份的上乙個月的天數 for int j 1 j int a sum 7 計算出總天數跟7求餘,得到乙個餘數 int monthday z是使用者輸入月份的天數 sw...

C語言輸出菱形

用c語言程式實現列印出乙個菱形,觀察菱形,它的每一行前面會有空格,要列印菱形,首先要算出空格多少的規律,以及每行的數目,把菱形分為上下兩部分列印。演算法分析 上半部分 菱形的最長一行 的數目為它的行數乘2再減上1,菱形的空格數為它上半部分行數減去它的行數。下半部分 每行的 數為2 line 1 i ...