2016-11-27 127 views
0

我想查找指針數組的長度。 這是我的代碼:c,查找指針數組的長度

char **histargv[histsize]; 
histargv[hist] = (char**)malloc(sizeof(char *)*arg); 

變量arg不是常量。 histargv數組的每個索引具有不同的參數值。 那麼我怎樣才能找到每個指數的參數值?

由於

+3

[如何找到'sizeof'(指向數組的指針)?](http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointerpolation對數組) –

+2

只能從其指針中找到動態分配數組的長度。 – qxz

回答

0

如果指針是字符串,則可以通過使用strlen找出串(未存儲器塊的大小)的長度。即搭配:

for (size_t i = 0; i < 100; ++i) { 
    histargv[i] = read_some_string_somehow_and_return_in_new_buffer(); 
} 

可以打印字符串,包括它們的長度是這樣的:

for (size_t i = 0; i < 100; ++i) { 
    printf("%3zu %zu %s\n", i, strlen(histargv[i]), histargv[i]); 
} 

如果這不是字符串,那麼你就應該按照禮Sadoffs評論的鏈接。

+0

你也可以找到沒有'strlen'的字符串的長度。你也可以使用'int i;'和'for(i = 0; *(c + i)!='\ 0'; i ++);'然後'i'就是字符串的長度(假設它是空的終止和'char * c'是字符串)。 –

+0

有很多方法,是的。但'strlen'可能要快得多,因爲它可以使用系統相關的優化,你的循環可能不會使用。你也可以寫'c [i]'而不是'*(c + i)',你可以完全放棄'!='\ 0'',你可以使用'size_t'作爲'i'的數據類型而不是' int'和and和;) –