C언어) 입출력 이야기 2

Lapis0875·2022년 12월 12일
0

c언어

목록 보기
18/21
post-thumbnail

🖥️ 입출력 이야기 (2)

이전 편에서는 표준 입출력을 사용하는 함수들을 다뤄봤어요. 이번에는, 문자열에서 입력을 받고 문자열로 출력하는 함수들을 다뤄볼게요.

문자열에 값을 쓰는 sprintf

printf의 문자열 버전이라고 생각하면 돼요. 표준 출력에 값을 쓰던 printf와 달리, 인자로 받은 문자열에 값을 쓰는 함수에요. 따라서, 첫 번째 인자로 값을 쓸 문자열을 받고, 이후의 인자는 printf와 동일해요.

int sprintf(char * restrict s, const char * restrict format, ...);

sprintf를 사용해, 문자열에 정수형 변수 a의 값을 채워볼게요.

int a = 10;
char str[10] = {};
sprintf(str, "%d", a);
printf("%s\n", str);
10

사실 위 예제만 보면, 그냥 printf를 하는게 더 나아보일 수 있어요. 하지만 sprintf는 '문자열'에 출력한다는 점에서, 변수 a에 저장된 값을 문자열로 바꾼 것과 같은 효과를 낼 수 있어요. 이외에도 출력하지 않고 문자열 값이 필요할 때 활용할 수 있겠죠 😎.

문자열에서 값을 읽는 sscanf

scanf의 문자열 버전이라고 생각하면 돼요. 표준 입력에서 값을 읽던 scanf와 달리, 인자로 받은 문자열에서 값을 읽는 함수에요. 따라서, 첫 번째 인자로 문자열을 받고, 그 이후에 scanf와 동일하게 인자를 받아요.

int sscanf(const char * restrict s, const char * restrict format, ...);

앞서 sprintf를 통해 문자열로 만든 a의 값을 다시 읽어 새 변수 b에 저장해볼게요.

int a = 10, b;
char str[10] = {};
sprintf(str, "%d", a);
sscanf(str, "%d", &b);
printf("b = %d\n", b);
b = 10

⚠️ 인자로 전달한 문자열을 읽는 방식

sprintf와 sscanf는 호출될 때 마다 주어진 문자열의 처음부터 쓰거나 읽어요. 이전에 읽은 부분 뒤에서 시작하지 않는다는 점에 유의해야 해요.

char input[] = "1234567890";
int a, b, c, d;
sscanf(input, "%3d%3d", &a, &b);	// a = 123, b = 456
sscanf(input, "%3d%3d", &c, &d);	// c = 123, d = 456
printf("a == c : %s\n", a == c ? "true" : "false");	// true
printf("b == d : %s\n", b == d ? "true" : "false");	// true
a == c : true
b == d : true
profile
새내기 대학생 개발자에요 :D

0개의 댓글