Android NDK 6 C語言字符串

前言

字符串(character string)是一個或多個字符的序列,很多高級語言像 java陋率、C#球化、Kotlin 都有字符串類型,但是 C 語言并沒有提供符串?dāng)?shù)據(jù)類型瓦糟,而是使用 char 類型的數(shù)組元素來存儲字符串筒愚。

在 C 語言中定義字符串有下列幾種形式:

  1. 字符串常量;
  2. char 數(shù)組菩浙;
  3. char 指針巢掺。

一、字符串常量

字符串常量的例子非常常見劲蜻,它是放在一對雙括號中的一串字符或符號陆淀。一對雙括號之間的任何內(nèi)容都會被編譯器視為字符串,包括特殊字符和嵌入的空格先嬉。當(dāng)使用 printf() 顯示信息時轧苫,就將該信息定義為字符串常量了,看以下示例:

printf("This is a string.");
printf("This is on\ntwo lines.");
printf("Foor \" you write \\\".");

執(zhí)行結(jié)果如下:

This is a string.
This is on
two lines.
For " you write \".

使用特殊字符時要注意轉(zhuǎn)義字符“\”的用法坝初。下面來看字符串常量在內(nèi)存中的存儲形式浸剩,如下圖所示:

string_in memory.png

每個字符串的末尾都自動添加了代碼值為 0 的特殊字符,這個字符稱為空字符鳄袍,寫為 \0绢要。C 中的字符串總是由 \0 字符結(jié)束,因此字符串的長度要比字符串中的字符數(shù)多 1拗小。

要注意的是重罪,在 printf() 函數(shù)遇到第一個空字符 \0 時就會停止輸出。

二哀九、存儲字符串的變量

C 語言對變量存儲字符串的語法沒有特殊的規(guī)定剿配,而且 C 中根本就沒有 字符串變量,也沒有處理字符串的特殊運算符阅束,但是標(biāo)準(zhǔn)庫中提供了很多函數(shù)來處理字符串呼胚。

2.1 char 數(shù)組

可以使用 char 數(shù)組來保存字符串,這也是字符串變量的最簡單的形式息裸,char 數(shù)組的聲明如下:

char exp[32];

該變量可以存儲一個最多包含 31 個字符的字符串蝇更,因為要預(yù)留一個數(shù)組元素給終止符“\0”沪编。

注意:如果使用這個數(shù)組來存儲 32 個字符(數(shù)組末位不是終止符),那么以上的 char 數(shù)組就不是表示一個字符串了年扩,僅僅是一個 char 數(shù)組而已蚁廓。

看另一種聲明方式,這里使用以下聲明初始化字符串變量:

char exp[] = "This is a string.";

這里并沒有指定數(shù)組大小厨幻,編譯器會指定一個足以容納這個初始化字符串常量的數(shù)值相嵌。在上例中數(shù)組大小為 18,其中前 17 個元素用來存儲字符况脆,最后一個用來存儲終止符“\0”饭宾。

要引用存儲在數(shù)組中的字符串,只需要使用數(shù)組名即可漠另,例如使用 printf 函數(shù)輸出存儲在數(shù)組中的字符串捏雌,%s 用于輸出一個用空字符中止的字符串

printf("the content of the array is %s\n", standard);

三、字符指針

可以通過指針來表示字符串笆搓,一般形式如下:

char* string = "This is a string.";

這里有一點要注意:可以對上面的 string 整體賦值性湿,但是不能修改字符串中的任一字符,否則會提示訪問沖突满败。例如:

string++; string = 'y';
string[1] = 'e';

在這段代碼中肤频,string 本質(zhì)上是一個字符指針,占 4 字節(jié)算墨;"This is a string." 分配在代碼段宵荒,占 18 個字節(jié);實際上總共耗費了 22 個字節(jié)净嘀,這 22 個字節(jié)中:4 字節(jié)的指針 string 叫做字符串指針(用來指向字符串的报咳,但是它本身不是字符串),17 字節(jié)的用來存 "This is a string" 這 17 個字符的內(nèi)存才是真正的字符串挖藏,最后一個用來存 '\0' 的內(nèi)存是字符串結(jié)尾標(biāo)志(本質(zhì)上也不屬于字符串)暑刃。

四、字符串常用的方法

請參考 C 在線手冊:http://www.kuqin.com/clib/

五膜眠、總結(jié)

C 語言中字符串的本質(zhì):指針指向頭岩臣、固定尾部的地址相連的一段內(nèi)存

  1. 字符串就是一串字符宵膨。字符反映在現(xiàn)實中就是文字架谎、符號、數(shù)字等人用來表達(dá)的字符辟躏,反映在編程中字符就是字符類型的變量谷扣。C 語言中使用 ASCII 編碼對字符進(jìn)行編程,編碼后可以用 char 型變量來表示一個字符捎琐。字符串就是多個字符打包在一起共同組成的抑钟;

  2. 字符串在內(nèi)存中其實就是多個字節(jié)連續(xù)分布構(gòu)成的(類似于數(shù)組涯曲,字符串和字符數(shù)組非常像);

  3. C 語言中字符串有 3 個核心要點:

  • 第一是用一個指針指向字符串頭在塔;
  • 第二是固定尾部(字符串總是以'\0'來結(jié)尾);
  • 第三是組成字符串的各字符彼此地址相連拨黔。
  1. '\0' 是一個 ASCII 字符蛔溃,其實就是編碼為 0 的那個字符(真正的 0,和數(shù)字 0 是不同的篱蝇,數(shù)字 0 有它自己的 ASCII編碼)贺待。要注意區(qū)分 '\0' 和 '0' 和 0;

  2. '\0' 作為一個特殊的數(shù)字被字符串定義為結(jié)尾標(biāo)志零截。產(chǎn)生的副作用就是:字符串中無法包含 '\0' 這個字符麸塞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涧衙,隨后出現(xiàn)的幾起案子哪工,更是在濱河造成了極大的恐慌,老刑警劉巖弧哎,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雁比,死亡現(xiàn)場離奇詭異,居然都是意外死亡撤嫩,警方通過查閱死者的電腦和手機(jī)偎捎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來序攘,“玉大人茴她,你說我怎么就攤上這事〕痰欤” “怎么了丈牢?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梦染。 經(jīng)常有香客問我赡麦,道長,這世上最難降的妖魔是什么帕识? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任泛粹,我火速辦了婚禮,結(jié)果婚禮上肮疗,老公的妹妹穿的比我還像新娘晶姊。我一直安慰自己,他們只是感情好伪货,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布们衙。 她就那樣靜靜地躺著钾怔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒙挑。 梳的紋絲不亂的頭發(fā)上宗侦,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音忆蚀,去河邊找鬼矾利。 笑死,一個胖子當(dāng)著我的面吹牛馋袜,可吹牛的內(nèi)容都是我干的男旗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欣鳖,長吁一口氣:“原來是場噩夢啊……” “哼察皇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泽台,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤什荣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后师痕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溃睹,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年胰坟,在試婚紗的時候發(fā)現(xiàn)自己被綠了因篇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡笔横,死狀恐怖竞滓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吹缔,我是刑警寧澤商佑,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站厢塘,受9級特大地震影響茶没,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晚碾,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一抓半、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧格嘁,春花似錦笛求、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡孔。三九已至,卻和暖如春蜂嗽,著一層夾襖步出監(jiān)牢的瞬間苗膝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工植旧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荚醒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓隆嗅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侯繁。 傳聞我的和親對象是個殘疾皇子胖喳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一贮竟。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)丽焊; ...
    朱森閱讀 3,446評論 3 44
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,345評論 0 2
  • 本文轉(zhuǎn)自:http://www.cnblogs.com/lidabo/p/5225868.html 1)字符串操作...
    XiaohuiLI閱讀 9,519評論 0 0
  • 蘇霍姆林斯基曾說:“一個人的童年是怎樣度過的技健?童年時代由誰引路?周圍世界中進(jìn)入了他的頭腦和心靈的東西...
    晚起畫蛾眉閱讀 572評論 0 0
  • 愿時光能緩惰拱,愿故人不散雌贱。 突然想起一個幾年前在網(wǎng)上通過漂流瓶認(rèn)識的朋友,人不錯偿短,有交心欣孤,后來他發(fā)生變故,我們就很少...
    哈皮曹閱讀 307評論 0 2