컴퓨터 공학 전공 필수 올인원 패키지 Onlne. - C. 10.문자
문자와 버퍼
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a;
char c;
scanf("%d", &a);
printf("%d\n", a);
scanf("%c", &c);
printf("%c\n",c);
return 0;
}
컴퓨터는 줄바꿈이나 공백등도 전부 아스키코드로 관리를 하고 있는데, 숫자를 입력하고 엔터를 누르게 되면, 그 숫자 값은 a에 들어가고, 바로 뒤에오는 공백, 바로 그 줄바꿈 자체 엔터라는 문자로 인식을 해버려서 문자로 입력을 받아버린다. 즉 a에는 입력한 숫자가 들어가지만 c에는 줄바꿈이 문자로 인식이 되어버린다. 이때는 남아있는 입력버퍼를 지워줘야 한다.
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a;
char c;
scanf("%d", &a);
printf("%d\n",a);
int temp;
// 한 자씩 받아서 파일의 끝이거나(EOF) 개행문자를(여기서는 \n) 만나면 입력을 멈추므로 항상 입력버퍼를 비운다.
while((temp = getchar()) != EOF && temp != '\n'){}
scanf("%c", &c);
printf("%c\n",c);
return 0;
}

#include <stdio.h>
int main(int argc, const char * argv[]) {
char *a = "Hello World";
printf("%s\n", a);
return 0;
}
또한, 배열과 포인터는 치환이 가능하니깐 포인터로 문자열을 선언했다고 하더라도 기존의 배열처럼 처리할 수 있다.
#include <stdio.h>
int main(int argc, const char * argv[]) {
char *a = "Hello World";
printf("%s\n", a);
printf("%c\n",a[1]);
printf("%c\n",a[4]);
printf("%c\n",a[8]);
return 0;
}
#include <stdio.h>
int main(int argc, const char * argv[]) {
char a[100];
gets(a);
printf("%s\n", a);
return 0;
}
C11표준부터는 버퍼의 크기를 철저히 지키는 gets_s()함수가 추가되었다.
