int vprintf(const char * __restrict _format, va_list _ap);
int vsprintf(char * __restrict _string, const char * __restrict _format, va_list _ap);
int vsnprintf(char * __restrict _string, size_t _n, const char * __restrict _format, va_list _ap);
셋 다 마지막 매개변수로 가변인수 목록이 담긴 포인터를 받는다는 공통점이 있지만 vprintf는 콘솔로 출력하고 vsprintf와 vsnprintf는 버퍼로 출력한다는 차이점이 있다.
vsprintf와 vsnprintf의 차이점은 vsnprintf는 버퍼의 크기를 지정해서 좀 더 안전하게 쓸 수 있다는 차이점이 있다.
버퍼에 담았으면 uart나 usbcdc로 리다이렉션해서 출력하면 된다.
void printmsg(char *format,...)
{
char str[128];
int len;
/*Extract the the argument list using VA apis */
va_list args;
va_start(args, format);
len = vsprintf(str, format, args);
SCI_writeCharArray(SCIA_BASE, (uint16_t *)str, strlen(str));
va_end(args);
}
void printmsg(char *format, ...)
{
char buf[128];
int len;
va_list args;
va_start(args, format);
len = vsnprintf(buf, 128, format, args);
SCI_writeCharArray(SCIA_BASE, (uint16_t*)buf, len);
va_end(args);
}
// ...
for(;;)
{
printmsg("Hello World! %d\r\n", loopCnt++);
DEVICE_DELAY_US(1000000);
}
'프로그래밍 > C' 카테고리의 다른 글
C ] atoi 함수 구현 (0) | 2023.03.25 |
---|---|
C ] isalpha, isupper, islower, isdigit, isxdigit, isalnum, isspace, ispunct, isprint, isgraph, iscntrl, isascii, 함수 구현 (0) | 2023.03.25 |
컴파일러 워닝 "was set but never used" 해결법 (0) | 2023.01.31 |
#ifdef 와 #if defined() 의 차이 (0) | 2023.01.31 |
C ] sscanf() 사용법 (0) | 2023.01.15 |