#include <stdio.h>
int main(int argc, char *argv[]) {
char s[]="help";
printf("%d",strlen(s));
}
なぜ上記の出力は 4 なのですか? 5 が正解ではありませんか?
メモリ内では「h」、「e」、「l」、「p」、「\0」である必要があります。
ありがとう。
strlen
: null ターミネータを含まない、指定されたバイト文字列の長さを返します。
char s[]="help";
strlen(s) should return 4.
sizeof
: 指定されたバイト文字列の長さを返します。null ターミネータが含まれます。
char s[]="help";
sizeof(s) should return 5.
strlen
null 文字に到達するまで要素をカウントし、その場合はカウントを停止します。長さには含まれません。
strlen()
配列内の文字数をカウントしません (実際、これはわかりません (配列の代わりにメモリへのポインターしかない場合))。ヌル文字を含まない文字まで。char s[] = {'h','i','\0','t','h','e','r','e'};
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).
4です。
strlen() は、値が 0 の最初の文字 (nul ターミネータ) までの文字数をカウントしますが、これは含みません。