2016-10-09 4 views
-1

次の2つの文字配列の違いは何ですか?1つはヌル文字、もう1つはヌル文字ですか?文字配列にヌル文字と除外文字を含めることの違いは何ですか?

char name1[] = {'j','o','h','n'}; 
char name2[] = {'j','o','h','n','\0'}; 

name1name2に差がある場合はどのようにそれはヌル文字を持っていないのでname1strlen仕事?

私はそれが0であることを期待しかし、それは何のヌル文字を持っていないのでNAME1の作業をstrlenをどのように1

+0

どちらの場合も、 'char'の配列を定義します。 'nul'ターミネータをコンパイラで追加したい場合は、' char name1 [] = "john"; ' –

+0

Hm、' strlen'の講義のような文字列リテラルで値を定義する必要があります。おそらく 'strlen'はヌルで終了していない文字列に対して** **動作しないことを示しています。 –

答えて

5

を得た

printf("%d", name1[5] == '\0'); 

のために、結果がどうなりますか。

これはありません。これにより、未定義の動作が呼び出されます。

私はそれが0であることが予想しかし、あなたのコードスニペットはname1[5]にアクセスしようとした1

を得ました。 namecharサイズ4の配列であるとすれば、その配列とは何の関係もないメモリにアクセスしていることになります。おそらく、実行時にメモリにnull文字が含まれていた可能性があり、この結果につながります。しかしこれは予測できないので、振る舞いはは未定義です。 name1

0

サイズはname1name2
サイズの大きさではないです4
name2の サイズは、配列を扱うとき 誰かが0ない1から数えるのを忘れて、配列からそれは知っている5
です。それはいつも迷惑です。 name1[5]は、禁止されたメモリアドレスを指します。これは、バッファオーバーフローと呼ばれるものです。

+1

実際、 'name1 [5]'と 'name2 [5]'の両方が範囲外のインデックスに登録されています。 –

2

name1はC-ストリングを定義しませんが、name2は定義しません。

C文字列は、最後の文字列がNUL文字である一連の文字です。 C-stringは型ではなく、Cでは文字列型を持っていません。標準ではC文字列の概念が定義されています。 C文字列にはstrlenを使用してください。

文字の配列を定義しました。それはCの型です:文字列。次に、文字列の中にはC文字列が含まれていて、他の文字列には含まれていません。 strlenは、C文字列を含まない文字配列には使用しないでください。

name1[5]が存在しないため、その配列には5文字(0〜4)しか含まれていません。

1

最初の配列と2番目の配列の違いは?二番目の配列は、5つの文字

2)最初の配列にstrlen(),のstrcpy(),のstrcmp() `のような機能を使用できないが、上でこれらの機能を使用することができている間

1)最初の配列は4つの文字であります2番目の配列

関連する問題