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

이처럼 처음 할당한 메모리인 배열 인덱스 30이 나온다.
잘 기억해두기!
strlen은 널 문자를 만날 때까지의 문자갯수
sizeof는 메모리 할당크기
헉 완전 도움되는 정보! 감사합니다