2010-02-12 26 views
1

我有以下問題:如何確定char指針數組元素的總字符長度?

我有字符指針

char *opts[] = { "-a", "--append", "-b" }; 

的陣列和存儲在

char cmd[] = "ls"; 

命令名稱現在我需要計算所有可能的組合,這是我我們已經完成了使用GNU科學圖書館並用計算組合執行命令。

我的問題是如何計算的內存,我需要的字符*獲取傳遞系統()的數量。

這是我第一次嘗試:

int length = strlen(cmd) * sizeof(char); 

for (int i = 0; i < 3; ++i) { 
    length += strlen(opts[i]) * sizeof(char); 
} 

好,它的工作,但我感覺到,這是不正確的/最佳的解決方案。我無法將二維數組轉換爲平坦的一維數組並獲取其大小(如果我沒有錯,C中沒有多維數組,C只能模仿它們)。

+0

,因爲一切都在映射到一維結束內存空間,沒有語言真正有多維陣列... – fortran 2010-02-12 16:03:29

回答

2

我不能投二維數組到一個平面的一維數組

技術上不正確的,但這裏無關緊要,因爲你沒有兩千萬維數組。你有一個一維數組,它恰好有一個長度。沒有保證這些字符串是連續記憶的,所以不可能一步測量它們的總數。

獲得它的唯一途徑是獲得您想要的e值。

P.S.需要注意的是sizeof(char)是保證等於1

PPS雖然我已經減價後tommie75的答案,我們可以把一部分的它的使用方法:

int numelem = sizeof(opts)/sizeof(opts[0]); 
for (int i = 0; i < numelum; ++i) 
{ 
    length += strlen(opts[i]) * sizeof(char); 
} 
+0

詹姆斯:謝謝! :)看到我編輯的答案,指出了一個令人誤解的問題標題... – t0mm13b 2010-02-12 14:50:23

+0

順便說一句,我不會保證sizeof(char)等於1 - 這是implmentation定義的結果,它可以在某些系統上在2 ... HTTP://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int – t0mm13b 2010-02-12 14:57:48

+1

@ tommieb75:C標準說: '當將[sizeof]應用於具有char類型,unsigned char或signed char(或其合格版本)的操作數時,結果爲1.' 因此si​​zeof((un)?signed)? char *是*保證爲1,標準爲C. – 2010-02-12 15:37:22

相關問題