728x90

공부 정리 83

C] fopen, freopen, fdopen를 사용하는 파일 접근 정리

아무래도 C/C++에서 파일 입출력을 사용했던 게 정보올림피아드 대회 문제 풀 때가 마지막이었던 것 같다. 그 당시에는 C++의 fstream이 더 편해서 그걸 이용했고, C를 사용할 때만 반 강제적으로 C의 fopen을 사용하곤 했는데 freopen을 알고 나니까 freopen과 fopen, 덤으로 fdopen에 대해서 조금 더 알고 싶어졌다. freopen은 온라인 저지를 이용한 알고리즘 문제를 풀 때 많이 사용한다. 입력할 데이터가 많으면, 하나하나 치는 것이 다 일이기 때문. 이 때는 입력 데이터를 파일로 만들어서 freopen으로 스트림을 변경시켜주기만 하면 scanf나 printf를 변경하지 않고도 파일입출력을 사용할 수 있어 편리하다.(물론 어지간한 크기의 데이터가 아니면 직접 치는 편이다...

C#] 파일의 MD5 해쉬값 얻어내기

파일의 MD5 해쉬를 얻어내는 코드는 간단하다. private FileInfo item; private byte[] hashcode; item = new FileInfo(filePath); hashcode = MD5.Create().ComputeHash(item.OpenRead()); using System.Security.Cryptography;를 별도로 추가해주면 정상적으로 작동한다. 다만, 해당 코드는 파일의 용량에 따라 해쉬값 연산 속도가 천차 만별이다. 용량이 작은 텍스트 파일 같은 경우는 ms 단위로 처리하고, 용량이 큰 영상 파일 같은 이진 파일은 10초(약 1.5~2GB)가 넘게 걸린다.

DataStructure] C언어로 쉽게 풀어쓴 자료구조 3장 - 1

1. C언어에서 배열에 대하여 다음 중 맞는 것은?답 : (2) 배열의 이름은 포인터와 같은 역할을 한다. 오답노트(1) 3차원 그 이상의 배열도 가능하다.(3) 배열의 인덱스는 0에서 시작한다.(4) 선언한 다음, 실행 도중에 크기를 변경하는 것은 불가능하다. 2. 다음 중 배열에 관한 문장 중 문법에 맞지 않는 것은?답 : (4) char *pb[30]="I am a student"; 해당 배열은 2차원 배열인데, 1차원 배열 초기화 방식을 사용하여 문제가 생긴 것. 3. float a[100]으로 선언되 배열의 시작 주소를 1000번지라고 할 때, 배열의 10번째 요소의 주소는 몇 번지인가?답 : (4) 1040번지 1000+4*10 4. 구조체에 관한 내용 중 틀린 것은?답 : (2) 구조체 변수..

C, C++] 이중 포인터를 이용해 2차원 배열 사용하기

동적 할당을 사용하면 포인터는 배열처럼 사용할 수 있다.여기까진 포인터를 어렴풋이 아는 입문자들도 포인터의 연산과 배열의 인덱스를 연관지어 어렵지 않게 이해할 수 있는 부분인데, 문제는 이중 포인터를 이용해서 2차원 배열을 선언할 때 발생한다. 일단 본론에 들어가기 앞서, 포인터를 이용해서 배열을 사용하는 방법을 그림과 식으로 이해해보자. Cint* ptr = NULL; ptr = (int*)malloc(sizeof(int)*5); C++ int* ptr = nullptr; ptr = new int[5]; 어렵지 않게 요소 5개 짜리 int형 배열을 동적 할당했다. 포인터를 외우듯 공부한 사람들이어도 아래 그림까지는 어렵지 않게 그려내고 이해할 수 있다. 이제 2차원 배열을 어떻게 동적 할당할 지 생각해..

C, C++] stdafx.h와 C2065(선언되지 않은 식별자입니다.)

비주얼 스튜디오(Visual Studio)로 코딩을 입문한 사람들이 자주 마주하는 오류 중 하나가 바로 "stdafx.h", 프리 컴파일 문제일 것이다. 입문자들 입장에선 프리컴파일이나, "stdafx.h" 같은 것이 뭔지 전혀 모르는 상황에서 이것이 무엇이라고 설명하는 건 크게 의미가 없을 것 같고, 이 게시물에서는 저 오류를 만났을 때 해결하는 방법을 이야기해볼까 한다. 이 문제는 특히 stdio.h(printf, scanf)가 아니라 iostream(cin, cout)을 사용할 때 주로 발생하는 문제인데, 이는 기본적으로 stdafx.h에 stdio.h가 미리 컴파일할 헤더 파일로 포함되어 있기 때문이다. stdafx.h // stdafx.h : 자주 사용하지만 자주 변경되지는 않는 // 표준 시스..

[WPF] Keyboard 클래스

Keyboard 클래스에서 키보드 관련 이벤트와 메서드, 키보드에 관련된 속성을 제공. 아래 이벤트를 적절히 이용해서 키보드 관련 처리를 하는 것이 좋음. 컨트롤이 포커스를 받았을 때PreviewGotKeyboardFocusGotKeyboardFocus 컨트롤이 포커스를 잃었을 때PreviewLostKeyboardFocus,LostKeyboardFocus 컨트롤이 논리적 포커스를 받았을 때GotFocus 컨트롤이 논리적 포커스를 잃었을 때LostFocus 키가 눌렸을 때PreviewKeyDownKeyDown 키가 눌렸다 떼어졌을 때PreviewKeyUpKeyUp 컨트롤이 텍스트 입력을 받았을 때PreviewTextInputTextInput

C, C++] 조건부 컴파일

조건부 컴파일은 정해진 조건에 따라서 코드의 컴파일 여부를 제어하는 전처리기. WinAPI용 코드를 리눅스에서 사용 제한하게 하는 것처럼 특정 플랫폼이나 OS에 특화된 코드를 구분하는 경우.디버깅이나 테스트 코드 용도로 추가된 코드를 구분하는 경우. #ifdef or #if/#elif/#else, 그리고 #endif를 이용하여 조건부 컴파일을 사용할 수 있음. #ifdef 매크로/* 코드 */#elif defined 매크로/* 코드 */#else/* 코드 */#endif #if 값 or 식/* 코드 */#elif 식/* 코드 */#else/* 코드 */#endif #if defined 매크로/* 코드 */#endif defined를 사용하면, #if를 사용했을 때보다 복잡한 조건을 사용할 수 있으며, 가..

C, C++] 매크로 정의, 해제

매크로 정의하는 방법은 알고 있었는데 해제하는 방법은 모르고 있었다.정의는 알고 있다시피 전처리기에서 #define을 이용해서 매크로를 정의해 사용하면 된다.이미 정의된 매크로를 이용해서 새로운 매크로 이름을 정의하는 방법도 가능하다. #define 매크로_이름 매크로 매크로를 해제하는 것은 #undef를 사용한다. #undef 매크로_이름 매크로를 해제한 상태에서 해당 매크로를 다시 사용하려고 하면 컴파일 에러가 발생한다.

728x90