정적 메모리 할당
문자’열’을 저장하기 위해서는 해당 문자가 차지할 기억공간 크기를 미리 할당해야 한다. 일반적인 변수 선언(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;
}
드디어 됨 ㅜ…