Unreal 강의
7일차 (12/19)
루인엘다
2023. 12. 19. 10:12
printf 함수 만들기 과제 이어서 설명
#include <iostream>
int StringCount(const char* _CPtr)
{
int Count = 0;
while (_CPtr[Count])
{
++Count;
}
return Count;
}
void NumberToString(int _Number, char* _Ptr)
{
int DivNumber = _Number;
int SubNumber = _Number;
int DigitCount = 1;
while (DivNumber / 10)
{
DivNumber /= 10;
++DigitCount;
}
int SubDigit = DigitCount;
for (int i = 0; i < DigitCount; i++)
{
int MulTen = 1;
for (int x = 0; x < (SubDigit - 1); x++)
{
MulTen *= 10;
}
_Ptr[i] = (SubNumber / MulTen) + '0';
SubNumber -= (_Ptr[i] - '0') * MulTen;
--SubDigit;
}
}
void MyPrintf(const char* const _Format, ...)
{
__int64 Address = reinterpret_cast<__int64>(&_Format);
int Number = StringCount(_Format);
int Count = 0;
while (_Format[Count])
{
char Ch = _Format[Count];
if ('%' != Ch)
{
putchar(_Format[Count]);
++Count;
}
char NextCh = _Format[Count + 1];
switch (NextCh)
{
case'd':
{
++Count;
Address += 8;
const int* Ptr = reinterpret_cast<int*>(Address);
char Arr[100] = {};
NumberToString(*Ptr, Arr);
int Index = 0;
while (Arr[Index])
{
putchar(Arr[Index]);
++Index;
}
++Count;
break;
}
default:
{
putchar(_Format[Count]);
++Count;
break;
}
}
}
}
int main()
{
MyPrintf("%d count %d index %d %d", 123, 456, 567, 890);
}
모든 인자는 메모리 영역에서 8바이트씩 떨어져있다.
방어 코드
내가 알지못하는 메모리를 침범하려고 하는 코드 등이 있을 때, 그런 코드를 막기 위해 사용하는 코드를 방어 코드라고 부른다.
배열
void Fuction(int _Ptr[10])
{
int Size = sizeof _Ptr;
}
이렇게하면 _Ptr의 크기가 40바이트일거같지만 컴파일러가 자동으로 포인터로 형변환을 하여 8바이트이다.
배열의 크기를 함수에서 자동으로 알 수 있는 방법은 없다. 따로 크기를 지정해서 인수로 넣어주던가 해야한다.
문자열 파싱을 이용해 전달받은 데이터를 구분해야 할 일이 많다.
문자열은 비교도 다른 함수를 사용하여 비교해야한다.
문자열 함수들은 여러가지가 있다.
- strlen => 문자열 길이
- strcmp => 문자열 비교
- strcpy_s => 문자열 복사
등등이 있다.
배열의 숙련도는 포인터의 숙련도와 같다고 볼 수 있다.
단축키
- Ctrl + A => 전체 선택
- Ctrl + K + F => 자동 줄맞춤