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

C語(yǔ)言字符串?dāng)?shù)組詳解

 更新時(shí)間:2021年08月14日 15:19:58   投稿:xusong  
這篇文章主要介紹了C語(yǔ)言字符串?dāng)?shù)組詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

C語(yǔ)言字符串?dāng)?shù)組

字符串是連續(xù)的字符序列,最后以空字符'\0'作為終止符。一個(gè)字符串的長(zhǎng)度指所有字符的數(shù)量,但不包括終止符。在 C 語(yǔ)言中,沒(méi)有字符串類型,自然也就沒(méi)有運(yùn)算符以字符串為操作數(shù)。

字符串被存儲(chǔ)在元素類型為 char 或?qū)捵址愋蛿?shù)組中(寬字符類型指 wchar_t、char16_t 或 char32_t)。寬字符組成的字符串也稱為寬字符串(wide string)。

C 標(biāo)準(zhǔn)庫(kù)提供了大量的函數(shù),它們可以對(duì)字符串進(jìn)行基本操作,例如字符串的比較、復(fù)制和連接等。在這些傳統(tǒng)的字符串函數(shù)以外,C11 新增了這些函數(shù)的“安全”版本,它們能確保字符串操作不會(huì)超出數(shù)組的邊界。

可以使用字符串字面量來(lái)初始化任何字符類型數(shù)組。例如,下面兩個(gè)數(shù)組的定義是等價(jià)的:

char str1[30] = "Let's go";             // 字符串長(zhǎng)度:8;數(shù)組長(zhǎng)度:30
char str1[30] = { 'L', 'e', 't', '\'', 's',' ', 'g', 'o', '\0' };

存儲(chǔ)字符串的數(shù)組一定比字符串長(zhǎng)度多一個(gè)元素,以容納下字符串終止符(空字符'\0')。因此,str1 數(shù)組能夠存儲(chǔ)的字符串最大長(zhǎng)度是 29。如果定義數(shù)組長(zhǎng)度為 8,而不是 30,就會(huì)發(fā)生錯(cuò)誤,因?yàn)樗鼰o(wú)法包含字符串終止符。

如果在定義一個(gè)字符數(shù)組時(shí),沒(méi)有顯式地指定長(zhǎng)度,但使用了字符串字面量來(lái)對(duì)它進(jìn)行初始化,該數(shù)組的長(zhǎng)度會(huì)比字符串長(zhǎng)度多 1。如下列所示:

char str2[] = " to London!";    // 字符串長(zhǎng)度:11 (注意開頭的空格);
                                                // 數(shù)組長(zhǎng)度:12

下面的語(yǔ)句使用標(biāo)準(zhǔn)函數(shù) strcat()把字符串 str2 附加到字符串 str1 的后面(str1 數(shù)組長(zhǎng)度必須足夠大以容納連接后的全部字符)。

#include <string.h>
char str1[30] = "Let's go";
char str2[ ] = " to London!";
/* ... */
strcat( str1, str2 );
puts( str1 );

調(diào)用 puts()后,輸出新的 str1 數(shù)組內(nèi)容:

Let's go to London!

str1 和 str2 的名字其實(shí)是兩個(gè)指針,它們指向各自數(shù)組的第一個(gè)字符。這樣的指針被稱為指向字符串的指針(pointer to a string),或者簡(jiǎn)稱為字符串指針(string pointer)。

字符串處理函數(shù)(例如 scrcat()和 puts())需要接收字符串起始地址并將其作為參數(shù)。這樣的函數(shù)通常逐個(gè)字符地處理字符串,直到遇到結(jié)尾終止符'\0'為止。
例 1 是函數(shù) strcat()的另——種可能的實(shí)現(xiàn)方式。它采用從函數(shù)參數(shù)傳入的指針遍歷處理整個(gè)字符串。 【例1】函數(shù) strcat()

// 函數(shù)strcat() 將第二個(gè)字符串復(fù)制一份并附加到第一個(gè)字符串的尾部
// 參數(shù):指向兩個(gè)字符串的指針
// 返回值:指向第一個(gè)字符串的指針,此時(shí)已將第二個(gè)字符串連接到了其尾部
char *strcat( char * restrict s1, const char * restrict s2 )
{
  char *rtnPtr = s1;
  while ( *s1 != '\0' )                         // 找到字符串s1的尾部
    ++s1;
  while (( *s1++ = *s2++ ) != '\0' )    // 將s2的首字符替換掉s1的終止符
    ;
  return rtnPtr;
}

以 s1 地址為起始位置的 char 數(shù)組,其長(zhǎng)度至少是兩個(gè)字符串長(zhǎng)度的和再加上 1,以容納字符串終止符。在調(diào)用 strcat()之前,可以采用標(biāo)準(zhǔn)函數(shù) strlen()進(jìn)行測(cè)試,以確保長(zhǎng)度沒(méi)有問(wèn)題,函數(shù) strlen()返回其字符串參數(shù)的長(zhǎng)度,如下所示:

if ( sizeof(str1) >= ( strlen( str1 ) + strlen( str2 ) + 1 ) )
  strcat( str1, str2 );

寬字符串字面量會(huì)加上一個(gè)前綴 L、u 或 U,它們是寬字符串的標(biāo)志。因此,wchar_t 數(shù)組的初始化過(guò)程如下所示:

#include <stddef.h>                        // 定義wchart_t類型
/* ... */
wchar_t dinner[] = L"chop suey";        // 字符串長(zhǎng)度:10;
                                                // 數(shù)組長(zhǎng)度:11;
                                                // 數(shù)組空間大?。?1 * sizeof(wchar_t)

到此這篇關(guān)于C語(yǔ)言字符串?dāng)?shù)組詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言字符串?dāng)?shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++缺省參數(shù)、函數(shù)重載與引用深入解析

    C++缺省參數(shù)、函數(shù)重載與引用深入解析

    缺省參數(shù)函數(shù)重載以及引用的出現(xiàn)是為了補(bǔ)充C語(yǔ)言語(yǔ)法的不足以及對(duì)C語(yǔ)言設(shè)計(jì)不合理的地方進(jìn)行優(yōu)化,引用的出現(xiàn)大大降低了我們學(xué)習(xí)C語(yǔ)言時(shí)相對(duì)于指針的難度,也便于我們更好的理解和使用,感興趣的朋友一起看看吧
    2024-04-04
  • 深入理解c++中virtual關(guān)鍵字

    深入理解c++中virtual關(guān)鍵字

    本篇文章主要是對(duì)c++中virtual關(guān)鍵字進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • C++?Boost?Foreach超詳細(xì)分析講解

    C++?Boost?Foreach超詳細(xì)分析講解

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11
  • C++常量詳解二(常量形參,常量返回值,常量成員函數(shù))

    C++常量詳解二(常量形參,常量返回值,常量成員函數(shù))

    這篇文章主要介紹了C++常量詳解二(常量形參,常量返回值,常量成員函數(shù)),需要的朋友可以參考下
    2017-06-06
  • C++中對(duì)C語(yǔ)言結(jié)構(gòu)體用法的擴(kuò)充

    C++中對(duì)C語(yǔ)言結(jié)構(gòu)體用法的擴(kuò)充

    今天小編就為大家分享一篇關(guān)于C++中對(duì)C語(yǔ)言結(jié)構(gòu)體用法的擴(kuò)充,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 解析OpenSSL1.1.1?centos7安裝編譯aes的c++調(diào)用

    解析OpenSSL1.1.1?centos7安裝編譯aes的c++調(diào)用

    這篇文章主要介紹了OpenSSL1.1.1?centos7安裝編譯aes的c++調(diào)用,實(shí)現(xiàn)方法也很簡(jiǎn)單,主要是在該文檔內(nèi)加入openssl的lib路徑,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • C語(yǔ)言實(shí)現(xiàn)隨機(jī)生成6位數(shù)密碼

    C語(yǔ)言實(shí)現(xiàn)隨機(jī)生成6位數(shù)密碼

    這篇文章主要為大家詳細(xì)介紹了如何使用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單而實(shí)用的隨機(jī)密碼生成器,該生成器將生成包含字母、數(shù)字和特殊字符的隨機(jī)密碼,有需要的小伙伴可以參考下
    2023-11-11
  • C++中Boost的智能指針shared_ptr

    C++中Boost的智能指針shared_ptr

    這篇文章介紹了C++中Boost的智能指針shared_ptr,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • QT5?Thread線程的具體實(shí)現(xiàn)

    QT5?Thread線程的具體實(shí)現(xiàn)

    本文主要介紹了QT5?Thread線程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器詳解

    如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器詳解

    這篇文章主要給大家介紹了關(guān)于如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論

观塘区| 苗栗市| 镇原县| 莱阳市| 小金县| 平乐县| 远安县| 缙云县| 蓬莱市| 福建省| 年辖:市辖区| 陆良县| 大英县| 红安县| 韶山市| 金华市| 宁德市| 宁河县| 福贡县| 云霄县| 司法| 新兴县| 通州市| 贺兰县| 平和县| 台东市| 株洲市| 彰化县| 颍上县| 宝鸡市| 克山县| 惠来县| 乌鲁木齐县| 玉龙| 修水县| 晋宁县| 丰县| 广州市| 汽车| 偃师市| 汉源县|