C語言編程技巧:跟我學如何定義及使用一個字符串數組

2021-01-15 編碼那些事

實現目的

我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?

如對於下面的一個字符串數組:

str = {

「I love C.」,

「I love C++.」,

「I love JAVA.」,

「I love Python.」,

「I love LabVIEW.」

}

下面給出C語言中的兩種定義方法。

方法1:定義一個char類型的二維數組

這種方法是通過定義一個char類型的二維數組實現,通過二維數組的行索引可得到數組中的每個字符串,列的大小限定了每個字符串所能包含的最大字符個數,所以採用這種定義方式時,列的大小必須不能小於數組所有字符串的最大長度。如對於上面的數組,C語言的定義代碼如下:

在取該數組的每個字符串時,直接對行索引即可。

方法2:定義一個指向char類型的指針數組

這種方法是通過定義一個指向char類型的指針數組實現,數組中的每個元素都是一個指針,通過該指針可得到數組中的每個字符串。如對於上面的數組,C語言的定義代碼如下:

兩種方法對比

上面的兩種方法都可以實現我們的目的,但在內存的佔用上兩種方法不同。第1種方法定義了一個5行20列的二維數組,即每個字符串所佔的字節長度都為20個,所以共需要佔用100個字節,而第2種方法是定義的指針數組,每個指針指向的字符串佔用的字節長度是其實際長度,所以其總的長度肯定小於100個字節。綜合來講,第1種方法相對於第2種方法,造成了存儲空間的浪費情況。

字符串數組定義及使用的完整測試代碼

下面給出這個例子的完整的C語言測試代碼,如下圖所示:

程序運行結果如下圖所示:

總結

一般在C語言中定義字符串的數組時,推薦使用第2種方法,特別是對於單片機、嵌入式等方面的程序開發時,可以充分利用有限的硬體資源,避免存儲空間的浪費。

相關焦點

  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    問題提出在C語言編程中,對於普通數組的定義,如定義一個包含10個int類型元素的一維數組a,我們採用下面的方式:int a[10];這種方式定義的數組是靜態數組,其特點是定義方便,無需管理其內存的佔用情況,但其缺點是一旦定義後,其數組的長度就固定了,而不能動態的改變其大小
  • 10個很棒的 JavaScript 字符串技巧
    最近開源了一個 Vue 組件,還不夠完善,歡迎大家來一起完善它,也希望大家能給個 star 支持一下,謝謝各位了。我們稱一個字符序列為字符串。這幾乎是所有程式語言中都有的基本類型之一。這裡跟大家展示關於 JS 字符串的10個很棒的技巧,你可能還不知道哦?
  • C語言編程技巧:控制臺程序中自定義函數實現數組內容的特定顯示
    因此,我們可以寫一個自定義的通用函數,用來根據需要顯示數組中的內容,並且可以自定義數據的顯示格式,如設置每行顯示的數據點數,設置位寬、保留小數點位數等。針對這種情況,下面給出這種自定義函數的編程實現方法。
  • 在C語言中如何高效地複製和連接字符串?
    就目前而言,在編程領域中,C語言的運用非常之多,它兼顧了高級語言的彙編語言的優點,相較於其它程式語言具有較大優勢。儘管這些函數可以同樣很容易地定義為返回一個指針來指向最後一個複製的字符(或它的後一位),而且事實證明這種做法也非常有用。兩個或多個字符串的連接操作的最佳複雜度和字符數量成線性關係。但是,如上所述,讓函數返回指向目標字符串的指針會導致操作的效率明顯低於最佳效率。該函數遍歷源字符串序列和目標字符串序列,並獲取指向這兩個序列末尾的指針。
  • 單片機的C語言中數組的用法
    數組是由具有相同類型的數據元素組成的有序集合。數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,後使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。
  • 快速上手系列-C語言之數組
    數組的基本概念:1、在程序設計中,為了方便處理數據,把具有相同類型的若干變量按有序的形式組織起來,這些按序排列的相同類型數據元素的集合稱為數組。數組往往被認為是一系列相同類型的變量,就像你去擼串兒,有羊肉串,有豬肉大串,也有串土豆片的等等,但很少有一串上既給你串了土豆又串了羊肉的,因為它們不是一個類型的,價格不一樣串在一起不好算錢不是。
  • 第四篇:C語言中指針與字符串核心知識點梳理
    前面在講變量的時候,其中有一個特點就是變量的內存地址,即:變量在內存中實際的保存位置。這個內存地址如何獲取?它又有什麼意義?重點包括:指針處理一維數組、動態內存分配等。C語言的基本數據類型中有一個char的關鍵詞,可以存儲單個的字符。那麼,像漢字以及由多個字符組成的內容,又該如何存儲呢?這點將涉及到本文第二個核心知識點:字符串及其常規操作。重點包括:字符串處理函數、指針與字符串的關係等。
  • 信息學競賽Pascal語言 數組與字符串(五)
    合肥奧數網訊:青少年信息學競賽Pascal語言:數組與字符串   一維數組   1、定義:   var   a:array[1..10]ofinteger;   其中:a是這一批數據的名稱,稱為數組名;array、of是定義數組的保留字
  • C語言基礎教學檔案!編號零零肆
    C語言關鍵字由於每種語言都有構造語句的單詞,因此C編程還具有具有特定含義的單詞,用於構造c程序指令。在C程式語言中,關鍵字是具有預定義含義的特殊單詞。關鍵字在C程式語言中也稱為保留字。在C程式語言中,有32個關鍵字。所有32個關鍵字都有自己的含義,編譯器已經知道了。
  • 在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法
    大家好,我們今日繼續講解VBA數組與字典解決方案第22講:在VBA中如何使用動態數組,以及利用動態數組去除重複值的方法。如果文本中含有大量的重複值,此時,如果我們要剔除重複值,該怎麼辦?用VBA的方法該如何做到呢?我在這講和下一講中將解答這個問題,並提供給讀者一個可以測試的實例。今日先講這個內容要用到的知識點。
  • Go語言學習筆記之字符串一
    Go語言是一個年輕人,身上擁有c++,java,python等語言的特點。在網絡通信、並發和並行編程擁有極好的體驗,當然不僅僅在這上上面,還有網絡編程,web應用,應用下載等有著非常大的潛力。這裡列舉一些 Go 語言的特點: 簡化問題,易於學習 內存管理,簡潔語法,易於使用 快速編譯,高效開發 高效執行 並發支持,輕鬆駕馭, 靜態類型 標準類庫,規範統一 易於部署 文檔全面 免費開源學習go語言有幾天了,今天突然想到把學的寫成筆記,記錄一下。如有不正確的請指教。
  • 在JavaScript字符串的search()方法中,如何匹配正則表達式?
    第一節:基本概念#JavaScript#正則表達式已經成為各大程式語言的標準,只是在不同的語言中,所使用的方式有所不同,但基本上核心的功能都是一樣的。正則表達式的核心功能是建立一種匹配模式,這個匹配模式可以理解為模板,模子。然後再拿具體的字符串來與這個模式進行匹配,如果匹配上,則表示符合要求,則進一步採用措施。
  • sizeof/strlen—字符數組/字符串的長度你真的懂嗎?附代碼
    高級程式語言的軟體開發過程對於內存的使用雖然不需要程式設計師做過度的檢查,但掌握各種數據類型的長度對任何程式設計師的編程開發都是至關重要的。基本數據變量字節長度代碼結果重點:字符數組與字符串所佔的字節長度這是一個很容易混淆的點,字符串與字符數組,sizeof與strlen,直接看代碼:字符數組、字符串的長度
  • LabVIEW編程技巧:功能強大的變體數據類型用法
    變體數據類型簡介LabVIEW是一種圖形化程式語言,所以也叫G語言,在程序框圖上連線時,必須相同類型或者能強制相互轉換的類型埠才能連接在一起,例如我們不能將一個數值型的控制項連接到布爾型的控制項上,也不能將一個數組類型的控制項連接到簇類型的控制項上。
  • C語言程序設計試題及答案
    A) 程序行 B) 語句 C) 函數 D) 字符2、C語言規定,在一個源程序中main函數的位置( )。A) 'a'&&'b' B) a<=b C) a||b+c&&b-c D) !((a<b)&&!c||1)14、設有數組定義:char array[]=「student」;則數組所佔的存貯空間為( )。
  • 很多C語言初學者都非常好奇的問題,怎樣定義可以可變參數函數?
    foo(),它可以接收類似於 printf() 的函數,並且將 fmt 中的 s 解析為字符串,d 解析為整數,c 解析為字符,因此編譯並執行這段C語言代碼,可得到如下輸出:# gcc t.c# .唯一需要注意的是使用 va_arg() 解析參數時,需要指定類型。但是這個過程也很簡單,可變參數函數的實現者可以指定一套規則,用於約束函數調用者傳遞參數,這樣就知道接下來需要解析的參數是何種類型。例如上面的C語言代碼就約定了 fmt 中的 s 表示接下來的要解析的參數是字符串,d 表示整數等。
  • 計算機二級考試C語言高頻考點
    C語言的標識符可以分為3類。①關鍵字:C語言規定的專用的標識符,它們有著固定的含義,不能更改②預定義標識符:和「關鍵字」一樣也有特定的變量要有變量名,在使用前必須先定義。③用戶標識符:由用戶根據需要定義的標識符。
  • 自考「C語言程序設計」模擬試題九
    A.d&ef          B.6a            C.z4x5c           D.a3/b4  3.在C語言中,存儲一個字符型、整型、單精度實型變量所需的空間是()。  A.3    B. 4    C. 11    D.12  7.設有字符串A=「He has 錢!」,則該字符串的長度為(   )。
  • 如何獲取numpy數組的真實地址?如何與ctypes數組共享內存?
    在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構成一個強大的類似於Matlab的科學計算環境,有助於我們通過 Python 學習數據科學或者機器學習。在Python中,當你定義了一個numpy類型的數組後,它內部元素的真實地址如何獲得呢?
  • 學會ANSYS數組的定義與使用,提高參數化建模與分析水平
    ANSYS中APDL的「數組」與其他高級語言概念類似,這裡通過實例介紹數組的定義、賦值、顯示等內容。在建模和後處理過程中,使用數組可大大提高參數化過程,進而提高分析效率。ANSYS數組分為數值型數組、表數組、字符型數組和字符串數組,如無特別說明,本文所指數組均為數值型數組。