2017-10-16 16 views
1

私は配列を持っていて、内部に要素の数を見つけたいと思っています。私が欲しいもの はこれです:Cの配列内の要素の数

char array[100]; 

array[0] = 'a'; 
array[1] = 'b'; 
array[2] = 'c'; 

この場合の要素数が3 であるそれは私が欲しいものです。

どうすればその値を見つけることができますか?

+2

あなたはコンセプトに誤りがあります。その配列には100要素があります。 'array [3]'(それ以降)_do_にはある種の値があります。私は長い間バニラCを使用していませんが、IIRCの正確な値は実装に依存します。実装によっては配列を0に初期化し、他のものはそのメモリ空間にすでにある可能性のあるガーベジを取るだけです。 –

+0

Cは低レベル言語です。それはあなたのためのものを追跡しません - あなたはそれを自分で行う必要があります。 'char array [100]'は100文字のメモリを割り当てます。それらは初期化されていないので、その値はランダムであり、Cには空の空間または空の空間の概念がありません。 –

+2

"used"要素はいくつありますか?あなたはすでにそれを知っています、あなたがそれを書いたからです。 –

答えて

1

あなたは

char array[100]; 
printf("%s", array); 

を行う場合は、abcを取得したいです。 char配列の要素を見つけるには、strlen()関数を使うことができます。

printf("%zu", strlen(array)); //would give you 3 
strlen()

は、\0ヌル要素に遭遇するまで内部ではなくゴミメモリ値を有する要素の数を返します。

についてstrlen()機能、http://www.cplusplus.com/reference/cstring/strlen/

で撮影

はC文字列の長さが終了 ヌル文字によって決定された文字列の長さ

を取得し、なぜコメンテーターは私に尋ねたので、 :AC文字列は、文字列の先頭から終端ヌル文字0までの間の文字数(文字数)と同じ長さです(0〜255)。(終了ヌル文字自体は含まない)。これは を文字列を保持する配列のサイズと混同しないでください。 例えば:

char mystr[100]="test string"; 

100文字のサイズと文字の配列を定義するが、mystrが初期化されているとC 列のみ11 文字の長さを有します。人々がnullターミネータについての懸念を持っていたのでそのため、はsizeof(mystr)は100と評価されながら、 はstrlen(mystr)11.

を返します。..

memset()関数を使用すると、すべての要素をnullに設定できます。

char array[100]; 
memset(&array, '\0', 100); 

要素を宣言すると、最後の要素をNULLターミネータに設定できます。

char array[100]; 

int elemenNum = 0; 

array[elemenNum] = 'a'; 
elemenNum++; 
array[elemenNum] = 'b'; 
elemenNum++; 
array[elemenNum] = 'c'; 
elemenNum++; 
array[elemenNum] = '\0'; //Null terminator 
elemenNum++; 

また、番号を手動で設定することもできます。あなたの好きなように。

最後に、李氏はコメントで述べたように、

そしてもちろん、この唯一の作品のすべての注文、0に値を設定した場合、1、 2、3 ...あなたは#1を設定した場合#2、#5、#9、strlen()は ではありません。

+1

'strlen'はなぜ機能するのですか? –

+3

バニラCで0初期化をすることはできません。 –

+1

'strlen'はなぜ機能するのですか?質問に掲示されたコードを与えます。 –

1

残りの値が設定されていないながら、この場合の要素の数は3

この場合の要素の数は依然として100である最初の3つは、初期化されます。

あなたは、あなたのコード内で有効とヌル文字を治療することを計画し、このようなゼロの配列を、事前に初期化しない場合は、次の

char array[100] = { 0 }; 

今、あなたはインデックスゼロからarrayを反復し、達したときに停止することができます最初の'\0'文字、またはarrayの末尾に達する方のいずれか早い方が来るようにします。

+1

また、高レベルの言語のように、あなたが設定した要素の数を追跡するだけです。 –

関連する問題