반응형
본 강의는 홍정모 교수님의 따배시 강의를 요약한 강의 노트입니다.
문자열 입출력하기
이전에 배웠던 문자는 %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개의 메모리의 주소가 되기 때문에 &를 빼주는 것이다.
출력 결과
정상적으로 실행되는 것을 볼 수 있다.
반응형
'IT 프로그래밍' 카테고리의 다른 글
[따배시] 4.7 printf 함수의 변환 지정자들 (0) | 2024.01.05 |
---|---|
[따배시] 4.5 기호적 상수와 전처리기 (0) | 2024.01.05 |
[따배시] 4.4 strlen() 함수 (0) | 2024.01.05 |
[따배시] 4.3 문자열이 메모리에 저장되는 구조 (0) | 2024.01.05 |
[따배시] 4.2 sizeof 연산자 강의 노트 (0) | 2024.01.05 |