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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

char添加一个字符_C语言动态接收多个字符串

發布時間:2025/3/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 char添加一个字符_C语言动态接收多个字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 背景與基本原理? ????在一些場合下,用戶往往需要動態輸入字符串,如果程序能夠自動接收傳進的字符串并進行計數,便可以達到動態接收的效果。基本原理是定義一個指向字符串指針的指針,對其進行進一步細化。我們期待程序能夠接收未知數量、未知長度的字符串,能夠動態保存字符串。如圖1所示,設計一個這樣的結構便可以達成以上要去。圖1 字符串在內存中的排布基本思想如下,存放一個字符串,需要一定的內存空間(如圖中最右邊的部分),而這段空間需要有一個地址指向它(如圖1中中間部分),圖1中中間部分的內存中存放著指向字符串內存的地址(紫色地址)。當有多個字符串時,需要指向多個存放字符串的內存,因此將這些地址組合起來,存放在一段內存中。而這個內存也需要一個地址指向它,即圖1中黃色地址。2. 數據結構整理我們知道指向一個字符串的地址為:?char*?str;再有多個字符串時,該地址就會有多個,將其組合起來。最簡單的思路時將其存放在一個數組中,例如: char* str_arr[9];????該數組有9個元素,每一個元素存放的是指向字符串的內存的地址。但是這種方法在定義字符串數組時會將其寫死,不利于動態擴展。????與字符串數組保存多個字符串的原理基本一樣,將存放目標字符串們的數組空間用一塊內存代替。因為存放的類型是char * ,所以指向這塊內存的地址便為 char **因此,定義一個二維指針用來描述這個字符串集合:char ** char_grp;????將其分解來看,char_grp指向的內存存放著一堆 char * ,而char *則指向任意的字符串,所以要針對每一個字符串存放的空間申請內存。其次,我們的目的是往每一個char *即圖1中紫色地址指向的內存中存放字符串。因此,申請一塊內存區域區域,用來保存這一堆指向字符串地址的集合,然后在知道每個字符串的長度后,給指向字符串的內存申請空間。3. 一個類比????類比于一個大家庭的開枝散葉過程,指向存放紫色地址的內存的地址,如圖中黃色的地址,看作是爺爺奶奶輩,這個地址指向的紫色地址為父母輩,可能有很多個父母、叔伯等,而父母、叔伯的下一輩即我們這一輩代表的是字符串。因此應該先給存放字符串集合的空間分配內存,再給集合中各字符串分配內存。先給爺爺奶奶輩、再給父母、叔伯輩,有了他們才能有子女輩的落腳點。4. 一個簡單的實現????比如:我們要存放9個字符串會按照如下的方式。首先申請9個地址所占的內存空間,char ** char_grp;chat_grp= (char **)malloc(sizeof(char *)*9);????此時chat_grp指向的內存空間可以存放9個,char * 的數據。接著在得知9個字符串長度的情況下,申請存放接收字符串的內存空間。int i = 0;for (i = 0; i < string_num; i++) {?????char_grp[i]?=(char?*)malloc(sizeof(char)?*?str_len);}對字符串操作后,記得釋放內存。for(i = string_num-1; i >= 0; i--){????????//釋放紫色地址指向的內存空間????????printf("chat_grp[%d]:?addr?:?%p?freed!\n" ,i,chat_grp[i]);????????free(char_grp[i]);????????chat_grp[i]?=?NULL; } //釋放黃色地址占用的內存空間????????free(char_grp);????這樣在我們讀到不定長度的字符串時,便可以使用該函數進行保存以及處理。5. 一個簡單的例子????使用make命令后,生成test可執行文件,其后可以添加任意數量、長度的字符串。之后的打印給出具體的內存申請以及釋放情況。????? ????????????????????????????????????????????????????圖2:運行示例
源碼獲取:
https://github.com/Meov/linux_learning_notes.git

總結

以上是生活随笔為你收集整理的char添加一个字符_C语言动态接收多个字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

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