2016-11-27 9 views
0

ポインタ配列の長さを見つけようとしています。 ここに私のコードです:c、ポインタ配列の長さを見つける

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

変数argは定数ではありません。 histargv配列の各インデックスは異なるarg値を持ちます。 どのように各インデックスのarg値を見つけることができますか?

おかげ

+3

[sizeof(配列を指すポインタ)の検索方法](http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing) -to-an-array) –

+2

ポインタからちょうど動的に割り当てられた配列の長さを見つけることができません。 – qxz

答えて

0

ポインタが文字列のためのものであるならば、あなたはstrlenを使用して、文字列の長さ(メモリブロックのサイズではない)を把握することができます。私。これが文字列でないなら、あなたはイーライSadoffsコメント内のリンクをたどる必要があり、

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

:と:

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

次のようにその長さを含む文字列を印刷することができます。

+0

'strlen'を除いた文字列の長さも知ることができます。あなたは '' int i; ''と '' for(i = 0; *(c + i)!= '\ 0'; i ++); 'を実行し、' i'は文字列の長さになります'char * c'は文字列です)。 –

+0

多くの方法があります。しかし、 'strlen'はおそらく、システム依存の最適化を使うことができるので、ループが使えないかもしれないので、はるかに高速です。また、 '*(c + i)'の代わりに 'c [i]'と書くことができます。 '!= '\ 0''を完全に削除することができます。' i' intとandと;) –

関連する問題