char a[] = {'a','b','c'};
cout << strlen(a) << endl;
输出 6
char a[3] = {'a','b','c'};
cout << strlen(a) << endl;
输出 6
char a[4] = {'a','b','c'};
cout << strlen(a) << endl;
输出 3
strlen 会一直往前找直到找到'\0',但是为什么第一第二个会返回 6 呢?
怪我咯2017-04-17 15:06:59
先分析您的代码:
으아아아문자열 길이 가져오기
C 문자열 문자열의 길이를 반환합니다.
C 문자열의 길이는 종료 null 문자에 의해 결정됩니다. C 문자열은 문자열의 시작 부분과 종료 null 문자 사이의 문자 수만큼 깁니다(종료 null 문자 자체는 포함하지 않음).
이를 문자열이 포함된 배열의 크기와 혼동해서는 안 됩니다. 예:
char mystr[100]="테스트 문자열";
은 100자 크기의 문자 배열을 정의하지만 mystr이 초기화된 C 문자열의 길이는 11자에 불과합니다. 따라서 sizeof(mystr)는 100으로 평가되지만 strlen(mystr)은 11을 반환합니다.
ringa_lee2017-04-17 15:06:59
문자 배열은 문자 배열이고 문자열은 문자열입니다. 문자열만 가지고 있습니다. , 문자 배열은 이런 방식으로 처리되지 않습니다. 이 세 가지 코드 조각의 출력 결과는 모두 임의의 값이어야 합니다. strlen이 실수로 생각하는 a의 메모리 오프셋에 데이터가 있으므로 읽은 수를 반환합니다. 바이트가 도착했습니다.
비추천을 받았어요... 비추천을 하신 분은 배열의 길이가 문자열의 실제 길이보다 길면 컴파일러가 자동으로 다음을 추가한다고 생각할 수도 있습니다. 실제로 이는 컴파일러의 특정 구현에 따라 달라지며 C 표준에서는 이에 대해 언급하지 않습니다.