国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C和指針(六)字符串、字符、字節(jié)

這篇具有很好參考價(jià)值的文章主要介紹了C和指針(六)字符串、字符、字節(jié)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

字符串
1,C沒(méi)有顯式的字符串類(lèi)型,以字符串常量形式出現(xiàn),存儲(chǔ)于字符數(shù)組中。

2,C字符串是一串以NUL字節(jié)結(jié)尾的字符。
1)字符內(nèi)部不能出現(xiàn)NUL字節(jié)。
2)NUL字節(jié)是字符串的終止符,不是字符串的一部分,所以字符串長(zhǎng)度不包括NUL字節(jié)。

3,頭文件string.h包含了使用字符串函數(shù)所需的原型和聲明。
4,標(biāo)準(zhǔn)庫(kù)函數(shù)有些是用匯編語(yǔ)言實(shí)現(xiàn)的,目的是充分利用機(jī)器提供的特殊字符串操作指令,可最大限度的追求速度。

字符串函數(shù)

1,字符串長(zhǎng)度strlen返回?zé)o符號(hào)整型。
1)兩字符串比較長(zhǎng)度應(yīng)直接比較大小,因?yàn)閮蔁o(wú)符號(hào)整型數(shù)相減結(jié)果永遠(yuǎn)大于等于0。
2)比較大小表達(dá)式中同時(shí)包含有符號(hào)和無(wú)符號(hào),應(yīng)將無(wú)符號(hào)強(qiáng)制轉(zhuǎn)換為有符號(hào)再計(jì)算。

2,不受限制的字符串函數(shù),通過(guò)尋找字符串參數(shù)結(jié)尾NUL字節(jié)判斷長(zhǎng)度,函數(shù)指定一塊內(nèi)存存放結(jié)果字符串,在使用這些函數(shù)時(shí),應(yīng)保證結(jié)果字符串不會(huì)溢出。
1)復(fù)制字符串strcpy,將源地址字符串復(fù)制到目的地址,如果源地址與目的地址有重疊,結(jié)果未字義,目的地址必須是字符數(shù)組或動(dòng)態(tài)內(nèi)存分配的指針,不能使用字符串常量。目的地址原參數(shù)內(nèi)容丟失,以源字符串及NUL字節(jié)結(jié)尾。使用時(shí)應(yīng)保證目標(biāo)字符數(shù)組空間足以容納需要復(fù)制的字符串,如果字符串比數(shù)組長(zhǎng),多余的字符會(huì)覆蓋數(shù)組后面內(nèi)存空間的值,strcpy無(wú)法判斷目標(biāo)字符數(shù)組的長(zhǎng)度,所以使用時(shí)就小心。
2)連接字符串strcat,將源字符串連接到目的字符串后面,如果源地址與目的地址有重疊,結(jié)果未定義,須保證字符數(shù)組足以容納源字符串。
3)strcpy和strcat返回指向目標(biāo)字符數(shù)組的指針。
4)字符串比較strcmp,兩字符串對(duì)應(yīng)字符逐個(gè)比較,直到發(fā)現(xiàn)不匹配為止,比較字符的字典序,前一字符串不匹配字符小于后一字符串字符則返回小于零的值,相等返回0,大于返回大于零的值。

3,長(zhǎng)度受限的字符串函數(shù),接受顯式長(zhǎng)度參數(shù),用于限定復(fù)制或比較的字符數(shù),防止目標(biāo)數(shù)組溢出。
1)strncpy, strncat, strncmp,復(fù)制、連接、比較指定數(shù)量字符,與不受限制版本一樣,如果源參數(shù)和目標(biāo)參數(shù)發(fā)生重疊,結(jié)果未定義。
2)strncpy將源字符串中指定長(zhǎng)度字符復(fù)制到目標(biāo)數(shù)組,如果源字符串長(zhǎng)度小于指定長(zhǎng)度,目標(biāo)數(shù)組使用NUL字符填充,如果長(zhǎng)度大于或等于指定長(zhǎng)度,指定長(zhǎng)度字符復(fù)制到目標(biāo)數(shù)組,結(jié)果可能不以NUL字節(jié)結(jié)尾,不是字符串。
3)當(dāng)使用strncpy函數(shù)創(chuàng)建字符串,應(yīng)確保字符串以NUL字節(jié)結(jié)尾,否則使用庫(kù)函數(shù)或在printf中使用%s格式碼打印時(shí)無(wú)法檢測(cè)到結(jié)束字節(jié)。
4)strncat會(huì)在結(jié)果字符串后添加NUL字符,最多在目標(biāo)字符串后連接指定長(zhǎng)度+1個(gè)字節(jié)。5)strncmp最多比較指定長(zhǎng)度字符。

4,當(dāng)調(diào)用函數(shù)請(qǐng)求操作系統(tǒng)執(zhí)行例如打開(kāi)文件等功能出現(xiàn)錯(cuò)誤時(shí),操作系統(tǒng)通過(guò)設(shè)置外部整型變量errno報(bào)告錯(cuò)誤代碼,strerror函數(shù)根據(jù)錯(cuò)誤代碼返回指向錯(cuò)誤描述字符串的指針。

5,總結(jié)
1)strlen函數(shù)計(jì)算字符串的長(zhǎng)度,返回值是一個(gè)無(wú)符號(hào)整數(shù)。
2)strcpy函數(shù)把一個(gè)字符串從一個(gè)位置復(fù)制到另一個(gè)位置。
3)strcat函數(shù)把一個(gè)字符串的拷貝添加到另一字符串的后面。
4)strcpy和strcat函數(shù)都假定它們的參數(shù)是有效的字符串,如果源字符串和目標(biāo)字符串出現(xiàn)重疊,函數(shù)的結(jié)果未定義。
5)strcmp對(duì)兩個(gè)字符串進(jìn)行詞典序比較,返回值提示第一個(gè)字符串是大于、小于還是等于第二個(gè)字符串。
6)長(zhǎng)度受限的函數(shù)strncpy、strncat、strncmp類(lèi)似對(duì)應(yīng)的不受限制版本,區(qū)別在于這些函數(shù)接受一個(gè)長(zhǎng)度參數(shù)。
7)strncpy中長(zhǎng)度指定了多少個(gè)字符將寫(xiě)入到目標(biāo)字符數(shù)組中,如果源字符串比指定長(zhǎng)度更長(zhǎng),結(jié)果字符串將不會(huì)以NUL字節(jié)結(jié)尾。
8)strncat函數(shù)的長(zhǎng)度參數(shù)指定從源字符串復(fù)制過(guò)來(lái)的字符最大數(shù)目,但它的結(jié)果始終是以一個(gè)NUL字節(jié)結(jié)尾。
9)strncmp函數(shù)長(zhǎng)度參數(shù)用于限定字符比較的數(shù)目,如果兩個(gè)字符串在指定的數(shù)目里不存在區(qū)別,便認(rèn)定是相等的。

查找函數(shù)

1,字符查找
1)strchr在字符串中查找某個(gè)特定字符第一次出現(xiàn)的位置,返回指向該位置指針,未找到返回NULL指針。
2)strrchr在字符串中查找某個(gè)特定字符最后一次出現(xiàn)的位置,返回指向該位置指針,未找到返回NULL指針。
3)strpbrk在字符串中查找另一字符串中任意字符第一次出現(xiàn)的位置,返回指向匹配字符位置指針,未找到返回NULL指針。

2,子串查找
1)strstr在字符串中查找子串第一次出現(xiàn)的位置,返回指向匹配子串的起始位置,未找到返回NULL指針。
2)標(biāo)準(zhǔn)庫(kù)不存在strrpbrk和strrstr函數(shù)。

3,字符串前綴查找。
1)strspn字符串與另一字符串中任意字符匹配的字符數(shù),當(dāng)出現(xiàn)不匹配字符時(shí)停止查找。
2)strcspn字符串不與另一字符串任意字符匹配的字符數(shù),當(dāng)出現(xiàn)匹配字符時(shí)停止查找。

4,標(biāo)記查找,用于提取分隔符隔開(kāi)的字符串。
1)strtok第一個(gè)參數(shù)指定一個(gè)字符串,第二個(gè)字符串參數(shù)是分隔符的集合,在字符串中找到分隔符集合中的下一個(gè)標(biāo)記,將其用NULL結(jié)尾,返回指向標(biāo)記的指針。
2)strtok第一個(gè)參數(shù)為NULL時(shí),函數(shù)在同一個(gè)字符串中從被返回的位置像前一次一樣查找下一個(gè)標(biāo)記,如果字符串中不存在分隔符,返回NULL指針。
3)典型情況下,第一次調(diào)用strtok傳遞一個(gè)指向字符串的指針,之后函數(shù)重復(fù)調(diào)用,第一個(gè)參數(shù)為NULL,直到返回NULL為止。

字符操作
1,標(biāo)準(zhǔn)庫(kù)包含兩組函數(shù)操作單獨(dú)的字符,原型位于頭文件ctype.h中,第一組用于對(duì)字符分類(lèi),第二組用于轉(zhuǎn)換字符。

2,分類(lèi)函數(shù)接受一個(gè)字符值的整型參數(shù),返回整型值,表真或假。
1)iscntrl控制字符
2)isspace空白字符:空格,換頁(yè)\f,換行\(zhòng)n,回車(chē)\r,制表符\t,垂直制表符\v
3)isdigit十進(jìn)制數(shù)字0~9
4)isxdigit十六進(jìn)制數(shù)字,0~9,a~f,A~F
5)islower 小寫(xiě)字母a~z
6)isupper大寫(xiě)字母A~Z
7)isalpha字母a~z、A~Z
8)isalnum數(shù)字0~9,字母a~z、A~Z
9)ispunct標(biāo)點(diǎn)符號(hào),任何不屬于數(shù)字和字母的圖形字符(可打印符號(hào))
10)isgraph任何圖形字符
11)isprint任何可打印字符,包括圖形字符和空白字符

3,轉(zhuǎn)換函數(shù)tolower,toupper將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)或?qū)⑿?xiě)字母轉(zhuǎn)換為大寫(xiě),其他不變。

內(nèi)存操作

1,字符串由NUL字節(jié)結(jié)尾,內(nèi)部不能包含NUL字符,非字符串?dāng)?shù)據(jù)內(nèi)部包含零值時(shí)不能使用字符串函數(shù),可使用另一組相關(guān)函數(shù),操作與字符串函數(shù)類(lèi)似,可以處理任意的字符序列。
1)內(nèi)存操作函數(shù)與strn前綴的函數(shù)不同,遇到NUL字節(jié)時(shí)不會(huì)停止操作。
2)字符串是零個(gè)或多個(gè)字符的序列,以NUL字節(jié)結(jié)尾。

2,memcpy從源地址復(fù)制n個(gè)字節(jié)到目標(biāo)地址,可以復(fù)制任何類(lèi)型的值,字符、整型等。
1)參數(shù)類(lèi)型是void*型指針,任何類(lèi)型的指針都可以轉(zhuǎn)換為void*型指針。
2)對(duì)于長(zhǎng)度大于一個(gè)字節(jié)的數(shù)據(jù),在第三個(gè)參數(shù)里數(shù)量和數(shù)據(jù)類(lèi)型長(zhǎng)度相乘,可以使用這種方式復(fù)制結(jié)構(gòu)或結(jié)構(gòu)數(shù)組。
3)目標(biāo)參數(shù)與源參數(shù)重疊結(jié)果未定義。

3,memmove與memcpy類(lèi)似,但源地址和目標(biāo)地址可以重疊,將源操作數(shù)據(jù)復(fù)制到臨時(shí)位置,臨時(shí)位置不會(huì)與源地址和目標(biāo)地址重疊,再?gòu)呐R時(shí)位置復(fù)制到目標(biāo)地址。
1)memmove通常無(wú)法使用某些機(jī)器提供的特殊字節(jié)或字符串處理指令。
2)可能比memcpy慢,但如果源地址與目標(biāo)地址可能存在重疊時(shí)應(yīng)該使用memmove。

4,memcmp對(duì)兩段內(nèi)存內(nèi)容比較n個(gè)字節(jié),按照無(wú)符號(hào)字符逐字節(jié)比較,如果比較的不是單字節(jié)數(shù)據(jù)如整型或浮點(diǎn)數(shù)時(shí)可能出現(xiàn)不可預(yù)料結(jié)果。
5,memchr查找字符在字符串中第一次出現(xiàn)的位置,返回指向該位置的指針,共查找n個(gè)字節(jié),如果n個(gè)字節(jié)中未找到該字符,返回NULL指針。
6,memset將目標(biāo)地址前n個(gè)字節(jié)設(shè)置為字符值,可用于字符數(shù)組初始化。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-498144.html

到了這里,關(guān)于C和指針(六)字符串、字符、字節(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C# 字節(jié)數(shù)組、各進(jìn)制字符串?dāng)?shù)據(jù)互轉(zhuǎn)

    C# 字節(jié)數(shù)組、各進(jìn)制字符串?dāng)?shù)據(jù)互轉(zhuǎn)

    日常開(kāi)發(fā)過(guò)程中,格式轉(zhuǎn)換是必不可少的重要環(huán)節(jié),經(jīng)常是十進(jìn)制轉(zhuǎn)十六進(jìn)制、十六進(jìn)制轉(zhuǎn) byte 數(shù)組又轉(zhuǎn)換回來(lái)來(lái)回轉(zhuǎn)換,最然進(jìn)制轉(zhuǎn)換很基礎(chǔ)同時(shí) C# 也提供了很多直接方便進(jìn)行格式轉(zhuǎn)換的方法,但是封裝一個(gè)工具類(lèi)會(huì)方便很多,不用每次都手寫(xiě)代碼邏輯,之前一直都是簡(jiǎn)單

    2023年04月27日
    瀏覽(28)
  • 實(shí)現(xiàn)對(duì)象轉(zhuǎn)成字節(jié)數(shù)組(整型支持按位寫(xiě)入,字符串則按字節(jié)寫(xiě)入)

    閑著無(wú)聊,寫(xiě)了一個(gè)對(duì)象轉(zhuǎn)換成byte[]的工具類(lèi),支持整型按位寫(xiě)入(大大節(jié)省空間),具體步驟如下: 1. 定義實(shí)體類(lèi)和注解 2. 工具類(lèi) ? ? 3. 測(cè)試結(jié)果 ? ? 參考文章: https://www.cnblogs.com/Dotnet9-com/p/17981055

    2024年01月23日
    瀏覽(26)
  • C語(yǔ)言指針操作(七)通過(guò)指針引用字符串

    C語(yǔ)言指針操作(七)通過(guò)指針引用字符串

    通過(guò)指針引用字符串詳解,以及字符指針變量和字符數(shù)組的比較、 在平常的案例中已大量地使用了字符串,如在 printf函數(shù)中輸出一個(gè)字符串。這些字符串都是以直接形式 (字面形式) 給出的,在一對(duì)雙引號(hào)中包含若干個(gè)合法的字符。在本節(jié)中將介紹使用字符串的更加靈活方便

    2024年02月03日
    瀏覽(23)
  • 【力扣】344. 反轉(zhuǎn)字符串 <首尾指針>

    編寫(xiě)一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過(guò)來(lái)。輸入字符串以字符數(shù)組 s 的形式給出。不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問(wèn)題。 示例 1: 輸入 :s = [“h”,“e”,“l(fā)”,“l(fā)”,“o”] 輸出 :[“o”,“l(fā)”,“l(fā)”,“e”

    2024年02月13日
    瀏覽(26)
  • FPGA初步學(xué)習(xí)之串口發(fā)送模塊【單字節(jié)和字符串的發(fā)送】

    FPGA初步學(xué)習(xí)之串口發(fā)送模塊【單字節(jié)和字符串的發(fā)送】

    UART 在發(fā)送或接收過(guò)程中的一幀數(shù)據(jù)由4部分組成,起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位,如圖所示。其中,起始位標(biāo)志著一幀數(shù)據(jù)的開(kāi)始,停止位標(biāo)志著一幀數(shù)據(jù)的結(jié)束,數(shù)據(jù)位是一幀數(shù)據(jù)中的有效數(shù)據(jù)。 通常用的串口數(shù)據(jù)幀格式是:8位數(shù)據(jù)位,無(wú)校驗(yàn)位,1位停止位。

    2024年02月14日
    瀏覽(19)
  • Java實(shí)現(xiàn)對(duì)象轉(zhuǎn)成字節(jié)數(shù)組(整型支持按位寫(xiě)入,字符串則按字節(jié)寫(xiě)入)

    閑著無(wú)聊,寫(xiě)了一個(gè)對(duì)象轉(zhuǎn)換成byte[]的工具類(lèi),支持整型按位寫(xiě)入(大大節(jié)省空間),具體步驟如下: 1. 定義實(shí)體類(lèi)和注解 2. 工具類(lèi) ? ? 3. 測(cè)試結(jié)果 ? ? 參考文章: https://www.cnblogs.com/Dotnet9-com/p/17981055

    2024年01月23日
    瀏覽(28)
  • 《熱題100》字符串、雙指針、貪心算法篇

    《熱題100》字符串、雙指針、貪心算法篇

    思路:對(duì)于輸入的的字符串,只有三種可能,ipv4,ipv6,和neither ipv4:四位,十進(jìn)制,無(wú)前導(dǎo)0,小于256 ipv6:八位,十六進(jìn)制,無(wú)多余0(00情況不允許),不為空 class Solution: ? ? def solve(self , IP: str) - str: ? ? ? ? if \\\'.\\\' in ?IP: #有可能是IPV4 ? ? ? ? ? ? res = IP.split(\\\'.\\\') ? ? ? ? ? ?

    2024年02月09日
    瀏覽(21)
  • C語(yǔ)言之通過(guò)指針操作字符串

    C語(yǔ)言之通過(guò)指針操作字符串

    下面我們來(lái)學(xué)習(xí)通過(guò)指針來(lái)靈活操作字符串的方法 我們用對(duì)指針的遍歷來(lái)實(shí)現(xiàn)判斷字符串的長(zhǎng)度 在函數(shù)形參的聲明中由使用[ ]變?yōu)?,這些聲明方式是一樣的,只是表面上的一些變化,實(shí)質(zhì)上并沒(méi)有什么變化。 程序中發(fā)生實(shí)質(zhì)性變化的事函數(shù)體,讓我們結(jié)合下圖來(lái)看(以輸入

    2024年01月19日
    瀏覽(31)
  • 8.4 【C語(yǔ)言】通過(guò)指針引用字符串

    在C程序中,字符串是存放在字符數(shù)組中的。想引用一個(gè)字符串,可以用以下兩種方法。 (1)用字符數(shù)組存放一個(gè)字符串,可以通過(guò)數(shù)組名和下標(biāo)引用字符串中一個(gè)字符,也可以通過(guò)數(shù)組名和格式聲明“%s”輸出該字符串。 例:定義一個(gè)字符數(shù)組,在其中存放字符串“I love

    2024年02月11日
    瀏覽(29)
  • C語(yǔ)言:寫(xiě)一個(gè)函數(shù),求字符串的長(zhǎng)度,在main函數(shù)中輸入字符串并輸出其長(zhǎng)度(指針)

    C語(yǔ)言:寫(xiě)一個(gè)函數(shù),求字符串的長(zhǎng)度,在main函數(shù)中輸入字符串并輸出其長(zhǎng)度(指針)

    分析: ? ?在程序中,定義一個(gè)函數(shù) fix,該函數(shù)使用指針變量來(lái)訪問(wèn)字符串中的每個(gè)字符,并計(jì)算出字符串的長(zhǎng)度。fix 函數(shù)的參數(shù)為指向 char 類(lèi)型的指針變量 p,表示需要計(jì)算長(zhǎng)度的字符串。 ? 在主函數(shù) main 中,定義一個(gè)大小為 20 的字符數(shù)組 a,用于存儲(chǔ)輸入的字符串。然

    2024年01月21日
    瀏覽(106)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包