IT 프로그래밍

[따배시] 4.1 문자열 입출력하기

기술1 2024. 1. 5. 09:35
반응형

본 강의는 홍정모 교수님의 따배시 강의를 요약한 강의 노트입니다. 

 

문자열 입출력하기

 

이전에 배웠던 문자는 %c로 받아내리는 것을 기억한 것을 바탕으로 코드를 만들었습니다. 그리고 주의해야 할 점은 scanf를 할 때 주소값을 입력받아오는 것이므로 &를 꼭 붙여줘야 한다는 것 잊지 않기 

 

문자로 표현한 오류가 있는 코드

#include <stdio.h>

int main(void)
{
	char fruit_name;

	printf("What is your favoraate fruit?\n");

	scanf("%c", &fruit_name); // be careful with &

	printf("You like %c\n!", fruit_name);

	return 0;
}

 

실행결과

 

바나나라 입력했는데 B까지만 뜬다. 해당 오류가 뜨는 이유는 char의 사용에 주목해야 한다.

 

char은데이터 하나만 담을 수 있으므로 B까지만 담은 것이다. 그러므로 scanf가 바나나를 담더라도 담을 공간이 부족해서 B 말고 날아간 것이다.

 

해결방법 (배열로 바꿔주기)

int main(void)
{
	char fruit_name[40];

	printf("What is your favorate fruit?\n");

	scanf("%s", fruit_name); // be careful with &

	printf("You like %s!\n", fruit_name);

	return 0;
}

 

char fruit_name 뒤에 [40]을 붙여줌으로써 40개의 메모리를 확보할 수 있는 것이다.

 

하나의 데이터 타입이 배열로 바꿔주었으면 여러개의 나열된 문자로 바껴주었기 때문에 %c에서 %s 로 바꿔줘야 한다.

문자는 %c
문자열은 %s

그리고 &도 빼줘야 한다. 

 

why?

fruit_name자체가 주소가 되기 때문에 &를 빼주는 것이다. 

char fruit_name[40]; 은 fruit_name 자체가 40개의 메모리의 주소가 되기 때문에 &를 빼주는 것이다.

 

출력 결과

정상적으로 실행되는 것을 볼 수 있다.

반응형