#include <stdio.h>
#include <stdlib.h>
char * Maxlen(void)
{
char * sentence;
int length;
fputs("문장의 최대 길이는? ", stdout);
scanf("%d", &length);
sentence = (char *) malloc(length);
return sentence;
}
int main(void)
{
char * sentence;
sentence = Maxlen();
printf("문장입력: ");
scanf("%s", sentence);
printf("%s \n", sentence);
return 0;
}
=======================
왜 그림에서 4바이트 힙 영역을 만들었는데
거기에 fuckyou를 넣어도 저장해도 (이게 안될텐데) 나중에 출력이 가능한지 너무너무 궁금함
도와줘요 프갤러~
운이좋아서
라고밖에 대답못함
가독성씹망
정의되지 않은 동작임
구현단계에서 설명하려면 설명할게 많겠지만 ㅇㅇ 단순히 언어차원에서만 본다면 정의되지 않은 동작
되겠냐
순전히 운이 좋아서다
sfuh//그러면 저게 가능한 이유는 컴퍼일러가 나를 실수를 매꾸어줬다는 이야기인가...?
질문아들// 그게 되니까 인증샷 찍고 쓴거지
데이터를 더 길게 넣으면 오류가 날수 있다. 안전장치 없음
경계검사를 안하니 메모리가 오염되는지도 모르지
버퍼 오버플로우
근데 기껏 함수만들어서 저장해놓은곳에다가 입력?
이거 진짜 무서운 코드다..... free 도 안해주고;;
프리정도 안해도 갠차는뎅
문제 푸는 데 실험해보다가 저거 너무 궁금해서 안쓴거임 봐주셈. 프리 쓸 예정이었음
저거 넘어가는거 잘못하면 콜스택에다가 이상한 데이터 써가지고 잣될듯
몬말인지 모르겠다 ㅋㅋ
다들 왜되는지 정확히모름
일단 문자열로 들어갔으니까 C언어는 문자열이면 끝에 00없을경우 계속 읽는다고
그게 심지어 문제가 있는 코드라도 말이야
문제는 저럴 경우 4byte뒤에는 보장을 못하는거지 만약 중요한데이터가 저기있다가 덮여졌다면 망하는거야
다만 VC는 알아서 조절하기때문에 어느정도 주소를 자기가 조절하기 때문에 니 실수가 메워진거야
gcc에다가 해봐라 제대로 프로그램 터지는게 뭔지 알게 될 거야
뒤에 뭐가 없다면 안터지겠지만 그건 운이지..
뒤에 뭐가 있으면 터지는건데 니가짠건 단순한 프로그램이라 뒤 메모리 쓰는 애가없어서 안터진거야