C語言不定長字串陣列運用的乙個例子

2021-08-21 15:35:17 字數 1066 閱讀 2119

最近在工作中遇到乙個問題:需要將乙個或多個檔案路徑與某個結構體或結構體陣列關聯起來,以對結構體進行初始化。我需要為這個操作寫乙個統一格式的介面。中間遇到一些不太理解的地方,我參考了這篇文章: ,對二維陣列的傳參有有了更多的理解。其實說到底,這些都是技巧上的問題而已。

現在把我的**抽象為最簡化的形式,如下:

#include char buff1[3] = ;

char buff2[1] = ;

static const char animal[20] = ;

void match(void)

int func1(char *buffer, int count, const char (*arg)[20])

return 0;

}int main(void)

這裡buff1, buff2 為實際問題中需要進行初始化的結構體,fruit, animal 為實際問題的檔案路徑名,func1為需要完成的介面函式。

需要注意的是,形式上的統一,因為func1的第乙個引數定為 char* 型別,所以對於buff2,不是寫成 char buff2  = 'a' 這種更為常見的形式,而是 char buff2[1] = 。這樣,我就能保證,在我使用buff2傳入func1時,引數格式是 char* 而不是char。 其實也可以使用 &buff2[0] 這種形式傳入。總之,這樣保證了不管我使用的是fruit這樣的具有多個字串的陣列,還是animal這樣的只有乙個字串的陣列,從形式來看,傳入函式時是一致的。

對於 static const char animal[20] = ; 這一句也是一樣的道理。

另外一點,函式引數中二維陣列的第二維指定為固定的值( char (*arg)[20] ),是字串陣列傳參常用的方法。也就是說,通常對於不定長的二維陣列,我們盡可能只讓第一維為不定長,這樣可以簡化很多操作。對於第二維也不定長的情況,可參考本文開頭提到的那篇文章去理解,實際上是人工地去處理乙個一維陣列。

程式編譯執行最終的結果如下:

C語言對 不定長 字串陣列的遍歷

一般來說,c語言的陣列的初始化可以通過三種方式 在宣告時使用,如 int a 10 使用memset,memset array,0,sizeof array 用for迴圈賦值c語言的陣列可以這樣宣告,int a 即不用事先計算長度,但是通過初始化的值的數量來自動判斷其長度。另外,對於這種宣告方式,便...

C語言字串不定長引數處理

寫乙個顯示函式 show char str 用於在某些特殊螢幕顯示。但是這個str 是乙個固定的引數,所以要先做 sprintf str,format,然後才能傳給它。這樣比較麻煩,直接寫成 show char str,int len,char format,輸入不定長引數,更加方便。include...

字元指標 定長字元陣列 不定長字元陣列 字元的區別

先來點基礎知識 printf中分別代表的輸出型別 c 字元 d 有符號十進位制整數 f 浮點數 包括float和doulbe e e 浮點數指數輸出 e e 記數法 g g 浮點數不顯無意義的零 0 i 有符號十進位制整數 與 d相同 u 無符號十進位制整數 o 八進位制整數 e.g.0123 x ...