[Windows API] WriteConsoleA | printf 대신 콘솔창에 출력하는 방법

Gyeongmin·2022년 1월 15일
0

WriteConsoleA 함수

stdio.h 헤더를 사용하지 않고 문자를 출력할 수 있습니다.
printf와 같이 SetConsoleTextAttribute 함수를 사용하면 글자 색을 바꿀 수 있습니다.

WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), &s, strlen(s), &charsWritten, NULL);

https://docs.microsoft.com/ko-kr/windows/console/writeconsole
자세한 설명은 여기서 확인할 수 있습니다.


매개 변수

  1. 콘솔 화면 버퍼에 대한 핸들
    GetStdHandle(STD_OUTPUT_HANDLE)

  2. 출력한 문자에 대한 포인터
    char 배열의 주소를 주면 됩니다.

  3. 쓸 문자 수
    문자 크기보다 적으면 이 값만큼만 출력합니다.
    넉넉하게 줘도 오류 없이 실행됩니다.

  4. 실제로 쓰인 문자 수를 확인할 변수에 대한 포인터
    DWORD 변수의 주소를 주면 됩니다.

  5. lpReserved
    NULL로 예약되어 있습니다.


printf와 속도 비교

비슷합니다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <time.h>
#include <Windows.h>

void main()
{
    clock_t start;
    DWORD charsWritten;

    start = clock();
    for (int i = 0; i <= 1000000; i++){
        WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), "ABCDEFG\n", 8, &charsWritten, NULL);
    }
    printf("WriteConsoleA 백만 번 걸린 시간 : %.3fs\n", (double)(clock() - start) / CLOCKS_PER_SEC);
}

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <time.h>
#include <Windows.h>

void main()
{
    clock_t start;
    DWORD charsWritten;

    start = clock();
    for (int i = 0; i <= 1000000; i++){
        printf("ABCDEFG\n");
    }
    printf("pirntf 백만 번 걸린 시간 : %.3fs\n", (double)(clock() - start) / CLOCKS_PER_SEC);
}

보다시피 속도는 큰 차이가 없습니다.
저수준 함수라고 해도 반드시 빠른 것은 아닙니다.

profile
HSU 21 이경민

0개의 댓글