C/C++ 관련 포스팅 목록
2020/07/01 - [Linux/C] - C/C++ API 문자열 특정 문자로 나누기(strtok)
2020/06/28 - [Linux/C] - C언어 API strchr(특정 문자 위치 검색)
2020/06/27 - [Linux/C] - C언어 API access(파일 존재 여부 확인)
기존의 문자열에 다른 문자열 붙이기
안녕하세요. 오늘은 C언어에서 기존에 사용하거나 만든 문자열 버퍼 끝에 다른 문자열을 붙이는 방법에 대해 알아보겠습니다. 연결하는 방법은 무수히 많지만 오늘은 가장 간단한 sprintf를 설명하겠습니다. sprintf 는 기존 문자열 뒤에 붙이고 마지막에 끝을 알리는 NULL의 값을 자동으로 넣어줍니다.
따라서 실수할 일은 없지만 기존 문자열의 버퍼 크기보다 더 큰 문자열을 붙이더라도 따로 오류는 발생하지 않고 그대로 붙입니다. 따라서 오버플로우 발생 위험이 높기 때문에 반드시 길이 제한을 잘 처리해야합니다.
sprintf
#include <stdio.h>
int sprintf(char *str, const char *format, ...);
#인자
str: 새로운 문자열을 붙일 기존 문자열 버퍼 포인터
format: 새로 붙일 값의 형식
....: format에 맞게 연결할 값들의 포인터
#반환
int: 붙이기에 성공한 문자열의 길이(정수)
예제 - 문자열 붙이기
#include <stdio.h>
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#endif
void main() {
char dest[50];
int r = 0;
r = sprintf(dest, "%s", "hello world");
if (r > 0) printf("result : %s\n", dest);
else printf("error\n");
}
위의 예제에서는 "hello world" 라는 문자열을 dest 버퍼에 붙이기 위해 포멧 "%s"를 사용하고 있습니다. 붙일 값의 형식이 문자열이기 때문입니다.
예제 - 고정 문자열 포멧 사용하여 붙이기
#include <stdio.h>
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#endif
void main() {
char dest[50];
int r = 0;
r = sprintf(dest, "student : %s", "heojun");
if (r > 0) printf("result : %s\n", dest);
else printf("error\n");
}
위의 예제는 "student : " 라는 고정 문자열 뒤에 %s로 인해 뒤 "heojun" 새로운 문자열이 삽입된것을 알 수 있습니다. 이처럼 새로 붙일 문자열에 고정된 포멧을 이용할 수도 있습니다.
예제 - 숫자 값을 문자열로 붙이기
#include <stdio.h>
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#endif
void main() {
char dest[50];
int score = 85;
int r = 0;
r = sprintf(dest, "student's score : %d", score);
if (r > 0) printf("result : %s\n", dest);
else printf("error\n");
}
위와 같이 포멧 문자열에는 %d가 있고 이 형식은 인자로 정수 변수 값을 문자열로 붙여줍니다. 따라서 score라는 정수형 변수를 인자로 전달하고 있는 것을 알 수 있습니다.
마무리
이번 포스팅에서는 c 언어에서 sprintf 사용 방법에 대해 알아보았습니다. 다음 포스팅에서는 printf 사용 방법에 대해 알아보겠습니다.