[C언어] strlen, sizeof의 차이는?

Park Sunjoo·2022년 4월 20일

C언어_스터디

목록 보기
2/4

시작하기 전

문자열과 관련된 c언어 문제를 푸는 중
for문을 사용하여 문자를 복사하는 것이 있었다.
이때 반복을 strlen로 하였는데 오류가 났다.
sizeof를 하면 문자열 자체가 아닌,
선언한 문자열 길이를 가져오기 때문에 사용을 하지 못햇다.
도대체 둘의 차이점은 무엇일까?

strlen

전에쓴 string.h 헤더파일 함수정리를 한 글에서 발췌를 하자면

strlen은 문자열의 끝 널 문자('\0')를 만났을 때까지 문자의 갯수를 세다 멈춘다.

즉 끝에 null이 없는 문자열(말이 안되긴 하지만) 이라면 말도 안되는 값이 나온다.

//1. 문자열을 복사하고, 길이를 구하는 프로그램을 작성하라.
	char ch1[30] = { "coding test" };
	char ch2[30];
	int i;

	for (i = 0; ch1[i] != 0; i++) {
		ch2[i] = ch1[i];
	}
	//ch2[i] = 0;
	for (int j = 0; j < i; j++) {
		printf("%c", ch2[j]);
	}
	printf("\n");
	printf("문자열의 길이: %d\n", i);
	printf("strlen: %d\n", strlen(ch2));  //strlen null까지의 문자열을 반환	 
	printf("sizeof: %d\n", sizeof(ch2));

이상한 결과


분명 문자열 인덱스를 30으로 선언했는데 길이가 61이라니 0o0...

ch[i] = 0;

중간에 문자열의 끝에 0 또는 null문자를 넣으면??


제대로 나온다


sizeof

sizeof는 메모리할당크기 이다.

이처럼 처음 할당한 메모리인 배열 인덱스 30이 나온다.

잘 기억해두기!
strlen널 문자를 만날 때까지의 문자갯수
sizeof메모리 할당크기

profile
개발, 디자인에 관심있는 문어발

1개의 댓글

comment-user-thumbnail
2022년 4월 21일

헉 완전 도움되는 정보! 감사합니다

답글 달기