자꾸 질문 드려서 죄송합니다...
친화력
2023.04.01
궁금한건 못참아서리...ㅡ.ㅡ;;
#include stdio.h
#include string.h
int main(void)
{
char str1[20] = samuelL.jacson;
char str2[1];
printf(original str1:%s,str1);
strcpy(str2,str1);
printf(new str2:%s\n,str2);
return 0;
}
str1을 str2로 카피해서 출력을 하는데 이거 보면 str2가 감당을 못하는 문자열이 아닙니까? 배열이 [1]인데...출력은 자연스럽게 되더군요....왜?...
-
아인
C언어의 맹점입니다.
C언어는 배열을 사용할 때, 사용가능한 영역인지를 확인하지 않습니다.
str2의 크기는 1바이트인데 17바이트를 쓰도록하여서 나머지 16바이트는 str2에 허용되지 않은(다른 변수나 프로그램 코드에 허용된) 곳을 침범합니다.
위와 같은 코딩은 연습이나 학습용으로만 사용하고 실전에서는 절대로 써서는 안 됩니다.