46
#include <stdio.h>

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

なぜ上記の出力は 4 なのですか? 5 が正解ではありませんか?

メモリ内では「h」、「e」、「l」、「p」、「\0」である必要があります。

ありがとう。

4

5 に答える 5

67

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

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

sizeof: 指定されたバイト文字列の長さを返します。null ターミネータが含まれます。

char s[]="help";
sizeof(s) should return 5.
于 2013-02-16T01:27:07.080 に答える
9

strlennull 文字に到達するまで要素をカウントし、その場合はカウントを停止します。長さには含まれません。

于 2013-02-16T01:25:14.847 に答える
4

strlen()配列内の文字数をカウントしません (実際、これはわかりません (配列の代わりにメモリへのポインターしかない場合))。ヌル文字を含まない文字まで。char s[] = {'h','i','\0','t','h','e','r','e'};

于 2013-02-16T01:28:29.363 に答える
2

strlen(const char* ptr)から始まり、ゼロになるまでゼロ以外の要素をカウントして、文字列の長さを返します。だから'\0'数えない。

このような質問については、参照のようなリンクを参照することをお勧めします。

次のように明確に述べられています。

 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).
于 2013-02-16T03:44:01.230 に答える
2

4です。

strlen() は、値が 0 の最初の文字 (nul ターミネータ) までの文字数をカウントしますが、これは含みません。

于 2013-02-16T01:25:23.523 に答える