最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中字符串的兩種定義方式詳解

 更新時間:2021年10月19日 10:21:15   作者:鹿九丸  
這篇文章主要為大家詳細介紹了C語言中字符串的兩種定義方式,小編覺得這篇文章寫的還不錯,具有一定的參考價值,感興趣的小伙伴們可以參考一下

我們知道C語言中是沒有字符串這種數(shù)據(jù)類型的,我們只能依靠數(shù)組進行存儲,即字符數(shù)組,而我們定義并且初始化數(shù)組有兩種方式。下面將給大家介紹這兩種方式并且介紹這兩種方式的區(qū)別:

方式1

前兩種是正確的定義方式,第一種之所以沒有指定字符數(shù)組長度的原因是編譯器能夠自己推斷出其長度,無需程序員自己設(shè)定,這也是我們比較推薦的一種定義方式,但注意內(nèi)存長度編譯器一經(jīng)判定就無法再次更改,接下來我們分析一下第三種編譯器為什么會出現(xiàn)亂碼。

 相信大家都知道,字符串是以'\0'字符為結(jié)束標志的,這個標志本身也占用一個內(nèi)存,我們在輸出的時候是看不到這個字符的,這是由編譯器所決定的,因為編譯器的符本身占用了一個字節(jié),所以sizeof()這個關(guān)鍵字在計算數(shù)組所占內(nèi)存時要比字符多一個,如圖中的arr1和arr2,而在計算arr3時,結(jié)果只有5,但輸出和圖二中我們所看到的卻不止5個字符,那么這是為什么呢?

今天想給大家樹立一個概念,我們在定義一個變量時,前面的類型加變量名實際上這是在內(nèi)存中開辟了一個空間,變量所占內(nèi)存的大小不是由變量的值所決定的,而時由我們最初開辟的空間的大小所決定的。這是一個很容易被大家忽視的一個小小的概念,希望大家能夠牢記這一概念。

int a = 0;//在內(nèi)存中開辟了一段4個字節(jié)的空間,然后將0的二進制補碼形式(0的補碼是其本身)放入到這段內(nèi)存空間中
char b = 'c';//在內(nèi)存中開辟了一段一個字節(jié)的空間,然后將字符'c'所對應(yīng)的ascii碼值所對應(yīng)的二進制補碼形式放入到這段內(nèi)存空間中
//至于數(shù)組形式實際和這個是類似的,就是先開辟好數(shù)組所占的內(nèi)存,然后將所要存儲的數(shù)據(jù)的二進制補碼形式放入到內(nèi)存空間中

相信大家對上述原因已經(jīng)有了屬于自己的一些了解,接下來跟大家談一下為什么數(shù)組arr3會輸出亂碼,'\0'是字符串的結(jié)束標志,但這個結(jié)束標志究竟有什么用呢?用處有兩點,第一點是strlen函數(shù)在計算字符串所占內(nèi)存空間時,遇到'\0'就會停止,進而能夠求得字符串的長度(當然,這個計算不會把'\0'結(jié)束標志計算在內(nèi));第二點是編譯器在執(zhí)行printf函數(shù)時,以字符串形式進行輸出字符數(shù)組時,遇到'\0'編譯器就會停止輸出,在arr3中,我們開辟的內(nèi)存空間中放滿了字符,沒有字符串結(jié)束標志'\0',所以編譯器會在把內(nèi)存空間中的字符輸出完并不會停止,還會繼續(xù)進行輸出,直到出現(xiàn)'\0'為止。

 

sizeof()計算的是變量所占的內(nèi)存空間的大小,即紅色框內(nèi)的內(nèi)存大小,也就是我們定義的大小,而strlen()計算的是從變量內(nèi)存起始位置開始,一直向后進行計算,直到遇到結(jié)束標志'\0'為止,即上圖中紅色的框,下面給大家代碼展示一下。

 相信大家已經(jīng)有所了解,這也能夠方便我們更好的理解第二種定義方式所遇到的問題。

方式2

上述三種定義方式中1和3是正確的,方式2中并未把結(jié)束標志'\0'放入到數(shù)組最后一個空間中,這也是我們常犯的一個錯誤,希望大家要牢記,在采用這種方式對字符串進行定義時,不要忘記加上字符串的結(jié)束標志'\0',因為編譯器不會為程序員自動添加'\0',所以我們并不推薦這種方式來對字符串進行定義,除了加上'\0'之外,另一種方式就是限定字符串長度,限定之后編譯器會在末尾加上結(jié)束標志'\0'(此處只是指的vs2019編譯器,其它編譯器筆者并未驗證),當然,最推薦的還是程序員手動添加'\0'作為結(jié)束標志。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換方法詳解

    C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換方法詳解

    這篇文章主要介紹了C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換的相關(guān)資料,大端和小端是數(shù)據(jù)在內(nèi)存中的存儲方式,大端模式下高字節(jié)存于低地址,小端模式則相反,大小端問題由數(shù)據(jù)類型多字節(jié)存儲引起,不同選擇形成不同存儲模式,需要的朋友可以參考下
    2024-10-10
  • C++ string 字符串查找匹配實例代碼

    C++ string 字符串查找匹配實例代碼

    下面小編就為大家?guī)硪黄狢++ string 字符串查找匹配實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • C語言實現(xiàn)快速排序

    C語言實現(xiàn)快速排序

    快速排序不一定是穩(wěn)定排序,這篇文章主要為大家詳細介紹了C語言實現(xiàn)快速排序算法,具有一定的參考價值,感興趣的同學(xué)可以借鑒閱讀
    2023-03-03
  • 一文詳解C++的訪問說明符

    一文詳解C++的訪問說明符

    訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關(guān)鍵字,它們用于封裝類數(shù)據(jù)并保護其免受意外修改或濫用,本文將給大家詳細的介紹一下C++的訪問說明符,感興趣的朋友可以參考下
    2024-04-04
  • C++封裝靜態(tài)鏈接庫和使用的詳細步驟

    C++封裝靜態(tài)鏈接庫和使用的詳細步驟

    這篇文章主要介紹了C++封裝靜態(tài)鏈接庫和使用,本文描述了怎么去把一個C++程序封裝成一個靜態(tài)庫并且如何去使用這些靜態(tài)庫,需要的朋友可以參考下
    2022-08-08
  • C語言中cJSON的使用

    C語言中cJSON的使用

    JSON是一種輕量級的數(shù)據(jù)交換格式,常用于在網(wǎng)絡(luò)之間傳輸數(shù)據(jù),本文主要介紹了C語言中cJSON的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • C++實現(xiàn)簡單通訊錄系統(tǒng)

    C++實現(xiàn)簡單通訊錄系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單通訊錄系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言文件操作詳解

    C語言文件操作詳解

    這篇文章主要介紹了C語言 文件操作解析詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • 從匯編看c++中extern關(guān)鍵字的使用

    從匯編看c++中extern關(guān)鍵字的使用

    本篇文章介紹了,在c++中extern關(guān)鍵字的使用概述,需要的朋友參考下
    2013-05-05
  • c語言簡單實現(xiàn)文件 r/w 操作方法

    c語言簡單實現(xiàn)文件 r/w 操作方法

    由于在 C 語言中 '\' 一般是轉(zhuǎn)義字符的起始標志,故在路徑中需要用兩個 '\' 表示路徑中目錄層次的間隔,也可以使用 '/' 作為路徑中的分隔符,本文重點給大家介紹用c語言簡單實現(xiàn)文件 r/w 操作方法,感興趣的朋友一起學(xué)習(xí)吧
    2021-05-05

最新評論

临湘市| 清徐县| 长顺县| 开阳县| 兴山县| 兴安县| 内丘县| 仁布县| 莎车县| 内黄县| 台安县| 会泽县| 北碚区| 翁牛特旗| 林口县| 石林| 清流县| 革吉县| 讷河市| 罗山县| 额济纳旗| 惠东县| 察哈| 泰兴市| 汝南县| 中西区| 页游| 萨嘎县| 托克逊县| 乐平市| 多伦县| 铜鼓县| 靖边县| 卫辉市| 虎林市| 白朗县| 浙江省| 雷州市| 洪洞县| 万年县| 电白县|