char cheese[5] = {'A','B','C','D','E'};
printf("%s\n", cheese);
결과값 ABCDE儆儆儆勍쌵(鎣으로 나옴.
근데 char cheese[6]으로 바꾸니까 정상적으로 ABCDE뜸
널문자 들어갈 공간 1바이트 넣어줘서 그런거임??
만약 그렇다면 널문자 있을 공간 없으면 왜 저딴 이상한 한자가 뜨는거임?
논리적으로 공간이 없는데 뭐가 더 많이 생기는게 이해가 안 가여
char cheese[5] = {'A','B','C','D','E'};
printf("%s\n", cheese);
결과값 ABCDE儆儆儆勍쌵(鎣으로 나옴.
근데 char cheese[6]으로 바꾸니까 정상적으로 ABCDE뜸
널문자 들어갈 공간 1바이트 넣어줘서 그런거임??
만약 그렇다면 널문자 있을 공간 없으면 왜 저딴 이상한 한자가 뜨는거임?
논리적으로 공간이 없는데 뭐가 더 많이 생기는게 이해가 안 가여
printf는 cheese의 시작 byte부터 NULL문자가 보일떄까지 printing함 그래서 ABCDE 뒤에 뭐가 얼마나 길게나올진, 어떤 문자가 나올진 아무도 몰라
아하 근데 문장이 저렇게 끝났따는건 어딘가에서 널문자를 찾았단건가여?
C에서 문자열은 /0로 구분해주는데 그게 없으니까 문자열이 어디서 끝나는지 구분이 안 되는 거지 그래서 덤프값이 나오는 거심 - dc App
메모리 주소상 해당 문자열과 인접한 쓰레기값이 출력되는 거 - dc App
근데 6으로만 바꾸고 배열원소안에는 널문자 안넣어도되는데 컴파일러가 똑똑해서 걍 자동적으로 널문자 넣어줬다 생각하면 되나여?
ㅇㅇ 그럴 거예요 - dc App
생략하면 나머지 원래 0x00값 들어가
너가 5개만 넣었으니까 6번째는 자동으로 0들가서 printf가 0찾아서 멈춘거
그럼 맨위에 댓글 질문도 답해줄 수 잇음?
이상한 문자는 원래 메모리에 있던 값인데 널값 못찾아서 문자인줄 알고 출력해버리는거
근데 그게 왜 무한하게 나오지않고 몇글자만 나오고 멈춰여? 널문자를 결국 못찾았으니 무한하게 이상한글자가 나와야하는거아닌가여?
누가 쓰고 놔둔 값인데 보통 다음 변수나 호출되었던 함수의 값이 들어가는데 의미 없는 값이라 쓰레기값이라 부름
그 쓰레기값중에 널 값이 있어서 멈춘거야
아하 결국 널값을 찾아서 멈춘거구나 ㄳㄳ 근데 누가 쓰고 놔둔 값이란건 누가 어떻게 쓴거예여?
운이 안좋으면 널 값을 못찾고 멈추기도 하는데 현대의 컴파일러는 그걸 방자하기 위해 끝에 널값을 넣어주기도 해
너가 호출한 함수가 쓰고 놔둔 값, 아니면 다음 위치의 변수 값
신기하네여 답변 ㄳ드려여