All Articles

정적 메모리 할당

정적 메모리 할당

문자’열’을 저장하기 위해서는 해당 문자가 차지할 기억공간 크기를 미리 할당해야 한다. 일반적인 변수 선언(char s;)은 기억공간 하나를 확보하는 것이므로, 문자’열’ 저장을 위해서는 배열을 이용해 알맞은 기억공간을 지정해야 한다.

정적 메모리 할당은 아래 특징을 가진다.

  • 선언과 동시에 크기 정해짐
  • 선언한 크기를 중간에 바꿀 수 없음
  • 소멸할 때 운영체제가 자동으로 할당한 메모리 회수

따라서 정적 메모리 할당 방식에서는 선언한 메모리와 다르게 훨씬 짧은 자료가 저장된다면 그만큼 메모리가 낭비된다. 이 점을 보완하기 위한 동적 메모리 할당 방식이 있다. (아마도 나중에 배우겠지)

아무튼 이걸 몰랐다가 대차게 헤맸다.

#include <stdio.h>
#pragma warning(disable:4996)

int main() {
  char greeting;
  printf("인사말을 입력하시오: ");
  scanf("%s", &greeting);
  printf("%s, World!", greeting);

  return 0;
}

응 안돼 돌아가 돌아가


빌드할 때 떴던 경고 메시지대로 바꿔볼까?

빌드 경고 메시지

#include <stdio.h>
#pragma warning(disable:4996)

int main() {
  char greeting;
  printf("인사말을 입력하시오: ");
  scanf("%s", greeting);
  printf("%c, World!", greeting);

  return 0;
}

빌드 시 warning은 사라졌으나 당연하게도 입력한 문자열 중 제일 앞글자만 출력됨 문자 하나만 출력

그럼 교재 예제를 그대로 따라해보자. 설마 글자수 할당하는 거로 해결이 될까?

#include <stdio.h>
#pragma warning(disable:4996)

int main() {
  char greeting[20];
  printf("인사말을 입력하시오: ");
  scanf("%s", &greeting);
  printf("%s, World!", greeting);

  return 0;
}

잉 경고가 뜬다. 경고 메시지 출력

일단 &greeting 부분이 문제인 것 같으니 그 부분을 수정해보자.

#include <stdio.h>
#pragma warning(disable:4996)

int main() {
  char greeting[20];
  printf("인사말을 입력하시오: ");
  scanf("%s", greeting);
  printf("%s, World!", greeting);

  return 0;
}

드디어 됨 ㅜ… 정상 출력