2013-02-16 3 views
24
#include <stdio.h> 

int main(int argc, char *argv[]) { 
    char s[]="help"; 
    printf("%d",strlen(s)); 
} 

上記の出力が4の理由は、5が正しい答えではありませんか?はcharのヌルターミネーターが長さのカウントに含まれています

それが 'H'、 'E'、 'l' の 'P'、 '\ 0' をメモリ内..

感謝しなければなりません。

+4

はsizeof(S)/はsizeof(文字)'、あなたが期待する答えを得るでしょう。 –

+3

@WaleedKhan:True - コードが上記のように書かれているとき。残念ながら、ほんの些細な変更(例えば、 'char * s =" help ";')はそれを破るので、あなたはそれにかなり注意する必要があります。 'sizeof(char)'は常に1になるように定義されているので、今のところ 'sizeof(s)'はコードとしては問題ありません。 –

+2

この問題に関してstrlenのドキュメントが不明でしたか? –

答えて

33

strlen:ヌルターミネータを含まない指定されたバイト文字列の長さを返します。

char s[]="help"; 
strlen(s) should return 4. 

sizeof:NULLターミネータを含む指定されたバイト文字列の長さを返します。あなただけの配列の代わりに、メモリへのポインタを持っている場合)(

char s[]="help"; 
sizeof(s) should return 5. 
+0

コメントは間違っています。 'sizeof'は5を返します:http://pastebin.com/94AbKunk – daaku

4

strlenは、ヌル文字に達するまで要素を数えます。この場合、要素はカウントを停止します。それには長さは含まれません。

2

それは4

はstrlen(だ)が、最大文字数を数えますが、0の値と、最初の文字を含めない - NULターミネータ。

4

strlen()は、(配列の文字数をカウントされません実際には、これはさえ知り得るではないかもしれません。それはあなたのように、い最大文字数を数えるが、ヌル文字を含まない、アウトを発見した。char s[] = {'h','i','\0','t','h','e','r','e'};

2

strlen(const char* ptr)を検討してゼロに達するまでで始まる非ゼロ要素をカウントすることにより、文字列の長さを返します。だから、'\0'はカウントされません。 。

私はあなたが参照することをお勧めしますこのような質問の場合はlinkのようになります。

それははっきりと述べています:あなたは `を使用した場合

A C string is as long as the number of characters between the beginning 
of the string and the terminating null character (without including the 
terminating null character itself). 
関連する問題