日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串和字符数组

發布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串和字符数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符串和字符數組

  • 字符串
  • 字符數組
  • 關于%s的問題
  • 字符越界和出現亂碼問題
  • 溢出

字符串

字符串是 "" 號賦值的 例: char a[]="hello";//長度為6 最后加了一個 ' \0 'char a[6]="hello"; 字符串會自動的在最后加一個'\0'的結束符,

字符數組

字符數組是一個一個的賦值 例:char a[5]={'1','2','3','4','5'};//長度為5 不會自動的加 ' \0 '

關于%s的問題

%s它要求參數是一個指針!!!即: 要求 char * 類型 %s 字符串的格式輸出, 它是一個接一個挨著輸出, 直到遇見'\0'才中止 當我們用scanf() 用到%s 時 它會自動的在最后加 '\0' 當我們用printf() 用到%s 時 它會一個接一個挨著輸出, 直到遇見'\0'才中止

字符越界和出現亂碼問題

我們可以看到出現了亂碼,這是為何? 首先我們的字符數組里沒有 \0 ,printf() %s 是直到 \0 才結束 這就說明查找 '\0' 越界了, 即亂碼 ' 口 ' 之后是 ' \0 ': 12345燙蘰 \0 我們的想法對不對呢? 看下圖

我們由上圖可以看到,沒有了亂碼。 這是因為scanf() %s 會自動的在最后加 ' \0 '也就是5后面加' \0 ',12345后面就是 '\0' 所以沒有了亂碼。

運行原理如下:

我們再驗證一下亂碼 '口'之后是不是真的有' \0 '


由上我們可以看出是真的有 ’ \0 '.

通過上面的例子我們可以直到: 也就是說跟定義時分配的空間大小毫無關系了? 不管空間小于字符串長度,還是大于字符串長度,總之只要最后printf()puts()沒有獲取到‘\0’ 這兩個函數就會繼續讀取給定空間之外的變量,因為這個變量是隨機的,不可預知的,所以很多時候就會是亂碼。

溢出

我們接著上面的例子: 講一講溢出

我們給 a[5] 賦值了這明顯溢出了但是確實可以的這是為何 ? 首先,數組越界它并不會造成編譯錯誤!就是說,C,C++的編譯器并不判斷和指出你的代碼“訪問越界”了。 一個明明是錯誤的東西,就這樣“順利”地通過了編譯,數組訪問越界在運行時,它的表現是不定的, 有時似乎什么事也沒有,程序一直運行(當然,某些錯誤結果已造成);有時,則是程序一下子崩潰。 因此在使用數組時,一定要在編程中判斷是否越界以保證程序的正確性。 我們再看一下其他的數組,例:整形數組,實型數組會不會越界出錯

由上總結: 再c/c++ 中所有的數組都可以越界,可以運行但是可能會帶來一些奇怪的問題 數組越界好比闖紅燈,不是每次都會被撞死,但是能不能活下來全賴人品。C語言不會對越界做檢查,是否出錯, 全看你有沒有寫入到某個內存地址,這個地址恰好存放重要的數據。 以下就是一個數組越界出現錯誤的例子


數組越界問題

總結

以上是生活随笔為你收集整理的字符串和字符数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。