C(5)
-
GetStdHandle 함수, SetConsoleTextAttribute 함수
C언어로 게임 프로그램 코딩을 하기 위해 콘솔 설정을 하는데 콘솔 색상 설정 함수를 정의할 때 SetConsoleTextAttribute 함수를 사용하며 인자로 GetStdHandle 함수를 사용한다. 각각 살펴본다. 그 전에 handle이 무엇인지 먼저 알아본다. 운영체제가 자신의 리소스를 안전하게 관리하기 위해서 주소를 사용하는 포인터 대신에 핸들이라는 개념을 사용한다. 핸들은 운영체제 내부에 있는 어떤 리소스의 주소를 정수로 치환한 값이다. 그리고 리소스의 주소와 핸들 값을 한 쌍으로 묶어서 관리하는데 이것을 '핸들 테이블'이라고 한다. 예를 들어 리소스의 주소를 응용프로그램에는 알려주지 않고 이 주소와 연결된 핸들 값을 전달하여 관리하는 것이다. GetStdHandle 함수는 실제 핸들을 반환하는..
2022.01.06 -
C언어 가변인수함수(printf 등)
가변 인수란 인수의 개수와 타입이 정해져 있지 않은 인수를 말한다. 대표적으로는 printf와 scanf 등이 있다. printf("Hello, World!"); printf("%d:%d",a,b); printf의 원형 : int _cdecl printf(const char*_Format, ...) 가변인수 함수에서는 반드시 고정 인수를 한 개 이상 가지고 있어야 하며, 가변 인수가 올 자리에는 ...가 있다. Format가 문자열 상수를 의미하고 고정 인수다. 고정 인수는 const char* 타입의 문자열이어야만 한다. cdecl은 함수를 호출할 때마다 호출원이 인수를 전달한 스택을 정리한다. printf는 인수의 수가 정해져 있지 않기 때문에 호출된 함수가 스택을 정리하는 _stdcall을 쓸 수가..
2021.12.15 -
c언어 배열초기화, 비트연산자
배열 초기화 1차원 char a[] = "Hello"; // 문자형 동적할당 int a[] = {1,2,3]; // 정수형 동적할당 2차원 int a[3][3] = {{1,},{2,}}; // a[0][0]은 1, a[0][3]은 2, 나머지는 0으로 초기화 #비트 연산자 연산자 설명 & 대응되는 비트가 모두 1일때 1 | 대응되는 비트 중 하나라도 1이면 1 ^ 대응되는 비트가 서로 다르면 1 ~ 비트 반전 >> 지정값만큼 왼쪽으로 비트 이동
2021.12.15 -
scanf 사용법 관련
백준 11718번 풀다가 모르는 부분이어서 기록하며 공부. 표준입력함수 scanf() 형식은 int scanf(const char *, 가변인자); 리턴 값 성공 시 : 입력받은 data 개수 실패 시 : EOF(-1) scanf 문을 쓸 때 공백이 있는 문자열을 입력 받을 수 있다. 문자열 입력 조건을 통해 처리하는 방법이다. []을 통하여 문자열 조건을 넣을 수 있다. [예제] char str[80]; scanf("%[12345]s",str); // 입력이 "4567"이면 str에 "45"가 저장된다. char str[80]; scanf("%[^12345]s",str); //입력이 "6745"이면 str에 "67"만 읽힌다. scanf("%[0-9]s",str); //0-9 는 0123456789 와..
2021.12.12 -
Error - scanf 반환값이 무시되었습니다.
실수형을 공부하다가 예제 3-6 실수형의 비교를 입력하는데 scanf 반환값이 무시되었다는 오류가 떴다. 이 오류는 함수 scanf의 반환값을 어딘가에 대입하거나 사용하지 않아서 발생하는 경고이다. 코드 상 문제도 없으며 단순히 버려지는 값이 있음을 알리기 위해 인텔리센스가 안내하는 내용이다. 해결방법은 코드 맨 위에 #pragma warning(disable:4996)을 넣어주고 scanf를 scanf_s로 바꾸어 주는 것이다. -c4996은 권장되지 않는 함수 사용에 관한 경고이다. scanf는 MS가 지정한 잘못 쓰면 안전하지 않은 일이 발생할 수 있는 함수들 중 하나이다. 그러나 문제에서처럼 %d %f 같은 고정폭 변수만을 받아오는 경우에는 문제가 안 되나 %c, %s 류 입력들에서 문제가 된다...
2021.09.07