이코드가 왜 실행시 닫혀버리는지 모르겟습니다 -_-;
봄해
#includestdio.h
#includestdlib.h
int main()
{
int i;
char * str = (char *) malloc(sizeof(char)*i);
printf(입력하고자 하는 문자열의 갯수 :);
scanf(%d,&i);
printf(문자열 입력:);
scanf(%s,str);
printf(문자열 출력 : %s, str);
return 0;
}
실행후 문자열갯수 입력하고 문자열 입력을하면 닫혀버리네요 끙..
-
한길찬
아니면 scanf밑에서 malloc을 쓰시면 될겁니다.
malloc으로 메모리 할당했다고 해서
뒤에 숫자를 나중에 바꾼다고 계속해서 사이즈가 변하는게 아닙니다. -
SchokoHolic
str에 메모리 할당할때 i만큼 할당하지 말고
상수를 지정하세요,,
i를 초기화 하지도 않고 메모리 할당을 해버렸네요 -
마디
malloc은 동적으로 영역을 잡을 때, 사용되며 힙 메모리가 사용됩니다.
malloc을 사용할 때, 그 사이즈 만큼을 잡게 되는데 위에서와 같은 경우는 i값이 쓰레기 값이 들어가 있기 때문에 char(1byte - 32bit에서..) * i 만큼의 사이즈가 잡히는 거죠..;;
근데, 제가 알기론 컴파일러가 영역을 잡는 사이즈는 한계가 있다고 들었다는 거죠..;;
그 범위를 넘어섰을 때, 아마 이러한 현상이 발생되리라 생각됩니다. -
감추어왔던
아 감사합니다.. malloc함수부분 이해가 잘안되네요 힙영역이면
컴파일과정후에 실행하면서 힙영역에 넣는거군요!; -
보아라
malloc보다 scanf가 뒤로 사용되었기 때문에.. 힙에 잡히는 사이즈는 몇 바이트가 될지...상상 불가..;;
(컴파일러가 그렇게 잡을 수 있을지도 의문..)
그로 인해 닫히는 게 아닐런지요,,? 결국 메모리 문제.. -
블랙캣
fflush(stdin); 이걸 넣어봣는데도 안되요 그리고 님말씀대로라면 들어간게 출력이되야죠 출력도안됨
-
재바우
그러니까 저문자열갯수 입력 저기서 입력하면서 버퍼가생깁니다 그걸 바로 밑에 문자열입력할때, 자동으로 들어가버리죠,
-
하연
그러고 보니 i 에 값이 없네요. ㅎㅎ
i 값은 입력 받은 후에 메모리 할당해야겠네요. -
지지않는
해줄일은 다한게 아닌듯 출력이 진행이안되는데요 문자열출력줄부분이
-
향율
할 일을 다 했으니, 사라지는 것이 당연합니다.
키보드를 누를때까지 기다리게 하려면,
다음 헤어 파일 추가해주시고,
#include conio.h
맨 아래 return 0; 위에 다음과 같이 입력하세요.
getch();