C 썸네일형 리스트형 [C언어] 플랫폼 독립적 COLORREF <-> RGB 서로 변환 ※요약COLORREF : -윈도우즈에서는 색상값을 표현하기 위해 COLORREF라는 데이터형을 사용-부호없는 32비트 정수형-R, G, B 각각 1바이트(8비트)이며 0~255 범위의 농도를 표현 RGB : -빛의 3원색인 적, 녹, 청을 혼합하여 색을 나타내는 방식 ※특징아래 소스는 윈도우 및 리눅스에서 사용 가능하고 필요한 부분만 붙여넣고 사용하면 됩니다.윈도우 상에서만 사용할 소스 코드라면 아래와 같이 긴 소스 코드가 필요 없고 RGB매크로와 GetRValue, GetGValue, GetBValue매크로만 사용하면 됩니다. 매크로가 있는데 굳이 함수로도 만든 이유는, 리눅스 상에서 사용할 때 편할 걸로 하기 위해서 입니다. 비트 연산이 이해가 안되면 직접 종이에 써 보면서 하면 쉽습니다. ※예제 #.. 더보기 [C언어] 파일 및 디렉토리 이름 변경 함수 - rename ※요약rename : 파일 및 디렉토리의 이름을 변경한다. ※특징이름 변경 말고도 파일을 이동할 때 사용할 수 있다. ※함수 원형 및 설명 int rename( const char *oldname, const char *newname ); //oldname : 파일 또는 디렉토리의 경로나 이름 //newname : 변경할 파일 또는 디렉토리의 이름 //반환값 : 성공 시 0, 실패 시 errno ( EACCES, ENOENT, EINVAL ) ※예제 #include #include //mkdir, rename int main( ) { char strOldFolder[] = "d:\\TestOldFolder"; char strNewFolder[] = "d:\\TestNewFolder"; //테스트 폴더를 .. 더보기 [C언어] 현재 작업 드라이브 구하는 함수 - _getdrive ※요약 _getdrive : 현재 작업 중인 드라이브를 구한다. ※함수 원형 및 설명 int _getdrive( ); //반환값 : A드라이브=1 ~ Z드라이브=26 일때 현재 드라이브 값 ※예제 설명 아래 예제의 getdrive는 int형을 반환하지만 반환값이 1에서 26으로 정해져 있어 char형 데이터 범위에 들어가므로 char형으로 변환해도 문제가 없다. int형 데이터를 char형으로 명시적 형 변환을 해줘서 각 드라이브명을 출력하게 했다. 96을 더해준건 아스키 코드표를 보면 알 수 있다. ※예제 #include #include //_getdrive int main( ) { int nDrive = 0; nDrive = _getdrive( ); printf( "현재 드라이브는 %c입니다.", c.. 더보기 [C언어] 작업 디렉토리 (폴더) 변경 함수 - chdir ※요약 chdir : 현재 작업 디렉토리를 변경한다. change directory ※함수 원형 및 설명 int chdir( const char *dirname ); //dirname : 변경할 디렉토리의 경로 //반환값 : 정상 일 때 0, 에러 시 -1 ※예제 #include #include //chdirㅐ #ifndef _MAX_PATH #define _MAX_PATH 260 #endif int main( ) { char strBuffer[_MAX_PATH] = { 0, }; char strChangeDir[_MAX_PATH] = { "C:\\Windows" }; int nResult = chdir( strChangeDir ); if( nResult == 0 ) { printf( "이동 성공" );.. 더보기 [C언어] 현재 작업 경로 얻는 함수 - getcwd ※요약 getcwd : 현재 작업 중인 디렉토리의 경로를 얻는다. ※특징 버퍼가 작으면 에러가 발생할 수 있으므로 크게 잡는다. ※함수 원형 및 설명 char *getcwd( char *buffer, int maxlen ); //buffer : 파일의 경로 //maxlen : 파일에 설정할 접근 모드 값 //반환값 : 정상 일 때 0, 에러 시 -1 ※예제 #include #include //getcwd #ifndef _MAX_PATH #define _MAX_PATH 260 #endif int main( ) { char strBuffer[_MAX_PATH] = { 0, }; char *pstrBuffer = NULL; pstrBuffer = getcwd( strBuffer, _MAX_PATH ); ret.. 더보기 [C언어] 파일 및 디렉토리 속성 변경 함수 - chmod ※요약 chmod : 파일이나 디렉토리의 읽기/쓰기 접근 권한을 변경한다. change mode ※특징 pmode 값은 _S_IREAD와 _S_IWRITE 값만 사용한다. ※함수 원형 및 설명 int chmod( const char *filename, int pmode ); //filename : 파일의 경로 //pmode : 파일에 설정할 접근 모드 값 //반환값 : 정상 일 때 0, 에러 시 -1 접근 권한 설 명 비 고 _S_IREAD 읽기 접근 권한 - _S_IWRITE 쓰기 접근 권한 _S_IREAD 속성 해제 ※예제 #include #include //_S_IREAD, _S_IWRITE #include //chmod int main( ) { char strPath[] = { "D:\\Text... 더보기 [C언어] 디렉토리 (폴더) 생성 함수 - mkdir ※요약 mkdir : 디렉토리(폴더)를 생성한다. make directory ※특징 만들려는 폴더가 이미 존재하면 errno는 EEXIST, 폴더가 부정확하면 errno는 ENOENT ※함수 원형 및 설명 int mkdir( const char *dirname ); //dirname : 생성할 디렉토리 경로와 이름 //반환값 : 정상 일 때 0, 에러 시 -1 ※예제 #include #include //mkdir #include //errno int main( ) { char strFolderPath[] = { "D:\\CreateFolder" }; int nResult = mkdir( strFolderPath ); if( nResult == 0 ) { printf( "폴더 생성 성공" ); } else.. 더보기 [C언어] 디렉토리 (폴더) 삭제 함수 - rmdir ※요약 rmdir : 디렉토리(폴더)를 삭제한다. ※특징 디렉토리 내에 파일이 존재하거나 사용중이면 삭제할 수 없다. 삭제 전에 디렉토리의 존재 유무 확인 후 삭제하면 좋다. ※함수 원형 및 설명 int rmdir( const char *dirname ); //dirname : 삭제할 디렉토리 경로 //반환값 : 정상 일 때 0, 에러 시 -1 ※예제 #include #include //rmdir #include //errno int main( ) { char strFolderPath[] = { "D:\\TestFolder2" }; int nResult = rmdir( strFolderPath ); if( nResult == 0 ) { printf( "폴더 삭제 성공" ); } else if( nResu.. 더보기 [C언어] 파일 삭제 함수 - remove ※요약 remove : 지정한 경로의 파일을 삭제한다. ※특징 읽기 전용, 숨김, 시스템 속성 등을 갖는 파일은 삭제할 수 없다. 또 현재 사용 중인 파일도 삭제할 수 없다. ※함수 원형 및 설명 int remove( const char *path ); //path : 파일 경로 //반환값 : 정상 일 때 0, 에러 시 -1 ※예제 #include int main( ) { char strPath[] = { "D:\\Text2.txt" }; int nResult = remove( strPath ); if( nResult == 0 ) { printf( "파일 삭제 성공" ); } else if( nResult == -1 ) { perror( "파일 삭제 실패" ); } return 0; } 더보기 [C언어] 디렉토리 및 파일 존재 유무, 속성 검사 함수 - access ※요약 access : 파일이나 디렉토리(폴더)의 존재 유무, 혹은 파일의 권한 및 속성을 조사할 때 사용한다. ※특징 주로 파일 및 디렉토리가 존재하는 지 조사할때 사용한다. ※함수 원형 및 설명 int access( const char *path, int mode ); //path : 파일이나 폴더의 전체 경로 또는 이름 //mode : 파일이나 폴더의 존재 유무 검사 또는 권한 조사(아래 표 참고) //반환값 : 정상 시 0, 에러 시 -1 ※모드 설명 모 드 설 명 00 파일 및 디렉토리가 존재 하는지 조사 02 쓰기 접근이 허용되는지 조사 04 읽기 접근이 허용되는지 조사 06 읽기 및 쓰기가 허용되는지 조사 ※예제 #include #include //access int main( ) { cha.. 더보기 [C언어] 유니코드로 한글 출력 시 문제 ※요약 유니코드 타입의 한글 문자열을 출력하려고 하면 깨지거나 ??? 등, 제대로 나오지 않는 문제점들이 있다. ※원인 네이버 지식인 참고 ※해결방법 locale.h //헤더를 추가 _wsetlocale( LC_ALL, L"korean" ); //지역화 설정을 전역적으로 적용 wcout.imbue( locale("korean") ); //출력시 부분적 적용 wcin.imbue( locale("korean") ); //입력시 부분적 적용 만일 한 프로그램에 여러 언어를 출력해야 한다면 그때그때 설정을 바꿔준다. ※예제 #include #include int main( ) { _wsetlocale( LC_ALL, L"korean" ); FILE *pFile = NULL; pFile = _wfopen( L"d.. 더보기 [C언어] 파일 에러 및 파일 끝 함수 - ferror, feof ※요약 ferror : 개방된 파일에서 데이터 조작시 에러가 발생되었는지 조사 feof : 개방된 파일에서 파일의 끝을 조사 ※함수 원형 및 설명 int ferror( FILE *stream ); //stream : 개방된 FILE 구조체의 포인터 //반환값 : 에러가 발생했으면 true, 아니면 false int feof( FILE *stream ); //stream : 개방된 FILE 구조체의 포인터 //반환값 : 파일의 끝이면 true, 끝이 아니면 false ※예제 #include #define print(ch) printf( "%x %c\n", ch, ch ) int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "r" ); if( .. 더보기 [C언어] 파일 포인터 위치 관련 함수 - fgetpos, fsetpos ※요약fgetpos : 개방된 파일에서 파일 포인터의 위치를 얻는다. fsetpos : 개방된 파일에서 파일 포인터의 위치를 설정한다. ※함수 원형 및 설명 int fgetpos( FILE *stream, fpos_t *pos ); //stream : 개방된 FILE 구조체의 포인터 //pos : 현재 파일 포인터를 읽어올 변수 //반환값 : 성공 시 0, 실패 시 0이 아닌 값 int fsetpos( FILE *stream, const fpos_t *pos ); //stream : 개방된 FILE 구조체의 포인터 //pos : 파일 포인터 위치를 설정할 값 //반환값 : 성공 시 0, 실패 시 0이 아닌 값 ※예제 #include #define print(n) printf( "%lld\n", n ) i.. 더보기 [C언어] 파일 포인터 초기화 함수 - rewind ※요약 rewind : 개방된 파일에서 파일 포인터의 위치를 0으로 설정한다. ※함수 원형 및 설명 void rewind( FILE *stream ); //stream : 개방된 FILE 구조체의 포인터 ※예제 #include #define print(n) printf( "%ld\n", n ) int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "w+" ); if( pFile == NULL ) { //에러 처리 } else { print( ftell(pFile) );//fopen 후 파일 포인터 위치 확인 fputs( "0123456789", pFile ); print( ftell(pFile) );//fputs 후 파일 포인터 위치 확인 r.. 더보기 [C언어] 파일 포인터 위치 설정 함수 - fseek ※요약 fseek : 개방된 파일에서 파일 포인터의 위치를 설정한다. ※특징 fseek 함수를 이용해 읽어온 파일의 크기를 구할 수도 있다. fseek( stream, 0L, SEEK_END ); int nFileSize = ftell( stream ); ※함수 원형 및 설명 int fseek( FILE *stream, long offset, int origin ); //stream : 개방된 FILE 구조체의 포인터 //offset : origin으로부터의 오프셋, 양수 또는 음수 가능 //origin : SEEK_SET, SEEK_CUR, SEEK_END 중 하나의 값 //SEEK_SET : 파일 시작점(BOF)에서 offset만큼 이동 //SEEK_CUR : 파일 포인터의 현재 위치에서 offset.. 더보기 [C언어] 파일 포인터 위치 구하는 함수 - ftell ※요약ftell : 개방된 파일 스트림의 현재 파일 포인터의 위치를 구한다. ※특징파일 포인터는 데이터를 읽거나 쓸 위치를 가르킨다.파일 포인터는 데이터를 읽거나 쓴 크기 만큼 자동으로 증가하며,위치를 수동으로 지정하려면 fseek함수나 fsetpos함수로 한다. ※함수 원형 및 설명 long ftell( FILE *stream ); //개방된 FILE 구조체의 포인터 //현재 파일 포인터의 위치를 반환 ※예제 #include #define print(n) printf( "%ld\n", n ) int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "w" ); if( pFile == NULL ) { //에러 처리 } else { long lp;.. 더보기 [C언어] 바이트 단위 파일 쓰기 - fwrite ※요약fwrite : 개방된 파일에 바이트 단위로 쓴다. ※함수 원형 및 설명 size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ); //buffer : 파일에 저장할 데이터 버퍼의 포인터 //size_t : 출력할 항목의 사이즈 //count : 출력할 항목의 개수 //stream : 개방된 FILE 구조체 포인터 //반환값 : 실제로 쓴 데이터 항목의 개수(count), 에러 시 count보다 작은 수 ※예제 #include int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "w+t" ); if( pFile == NULL ) { //에러 처리 } els.. 더보기 [C언어] 바이트 단위 파일 읽기 - fread ※요약fread : 개방된 파일에서 바이트 단위로 파일을 읽는다. ※함수 원형 및 설명 size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); //buffer : 파일 데이터를 읽어서 저장할 버퍼의 포인터 //size_t : 항목의 사이즈 //count : 항목의 개수, 읽어올 횟수 //stream : 개방된 FILE 구조체 포인터 //반환값 : 실제로 읽은 데이터 항목의 개수, 에러 시 count보다 작은 수 ※예제이번 예제는 Point Cloud 프로그램에서 사용하는 *.ply파일을 읽는 예제다.파일의 구조는 헤더와 데이터로 나눠져 있으며, 예제에 주석으로 헤더, 데이터 읽는 부분을 표시하였다.파일 헤더의 내용은 포맷과 점의 개수.. 더보기 [C언어] 문자 단위 파일 쓰기 함수 - fputc ※요약 fputc : 개방된 파일에 단일 문자를 쓴다. ※함수 원형 및 설명 int fputc( int c, FILE *stream ); ⁄⁄c : 개방된 파일에 쓸 문자 또는 ASCII 값 ⁄⁄stream : 개방된 FILE 구조체의 포인터 ⁄⁄반환값 : 읽은 문자 값(int), 파일 끝 또는 에러 시 EOF(-1) ※예제 #include #define print(n) printf( "%x %c\n", n, n ) int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "w" ); if( pFile == NULL ) { //에러 처리 } else { int nResult = fputc( 'T', pFile ); print( nResult );.. 더보기 [C언어] 문자 단위 파일 읽기 함수 - fgetc ※요약 fgetc : 개방된 파일의 단일 문자를 읽는다. ※함수 원형 및 설명 int fgetc( FILE *stream ); //stream : 개방된 FILE 구조체의 포인터 //반환값 : 읽은 문자 값(int), 파일 끝 또는 에러 시 EOF(-1) ※예제 #include #define print(ch) printf( "%x %c\n", ch, ch ) int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "r" ); if( pFile == NULL ) { //에러 처리 } else { char chTemp; while( !feof( pFile ) ) { chTemp = fgetc( pFile ); print( chTemp ); } fc.. 더보기 [C언어] 변수 단위 파일 쓰기 함수 - fprintf ※요약 fprintf : 개방된 파일에 변수 단위 출력을 한다. ※특징 fprintf는 sprintf, printf와 사용법이 같다. 파일 포인터는 자동으로 증가한다. ※함수 원형 및 설명 int fprintf( FILE *stream, const char *format, [, argument].. ); //stream : 개방된 FILE 구조체의 포인터 //format : 형식 제어 문자열 //argument : 가변적인 매개변수 //반환값 : 출력한 바이트의 수. 에러 시 EOF(-1) ※예제 #include int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "w" ); if( pFile == NULL ) { //에러 처리 } else.. 더보기 [C언어] 변수 단위 파일 읽기 함수 - fscanf ※요약 fscanf : 개방된 파일에서 변수 단위로 입력을 받는다. ※특징 변수 간의 구분은 공백, 탭, 개행 문자로 한다. *는 값을 읽지 않고 건너뛸 때 사용한다. 파일 포인터는 자동으로 증가한다. ※함수 원형 및 설명 int fscanf( FILE *stream, const char *format [, argument].. ); //stream : 개방된 FILE 구조체의 포인터 //format : 형식 제어 문자열 //argument : 가변적인 매개변수 //반환값 : 읽혀진 필드의 수. 파일 끝 또는 에러 시 EOF(-1) ※예제 #include int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "r" ); if( pFile ==.. 더보기 [C언어] 난수 생성 함수 rand, srand 사용법 및 중복 없는 난수 생성 ※요약 rand : 예측할 수 없는 하나의 난수를 생성한다. 난수의 범위는 0~RAND_MAX 까지이며 RAND_MAX는 0x7fff이므로 , 결국 난수의 범위는 0~32767 이다. srand : rand 함수만으로 생성되는 난수는 일정한데 srand를 이용, 시간 값을 매개로 초기화하면 일정하지 않고 불규칙적인 난수가 생성된다. ※함수 원형 및 설명 int rand( void ); void srand( unsigned int seed ); ※사용법 ( 사용법 부분은 "C언어를 배우자" 카페의 라이터님의 게시물을 허락 후 옮겼습니다. ) 1. 기본 사용법 i = rand()%n 이것은 0 ~ n-1 범위의 난수를 i에 대입합니다. 예를 들어 n=6 이라 하면 0, 1, 2, 3, 4, 5, 중 하나가 .. 더보기 [C언어] 콘솔 창에서 컬러 텍스트 출력 콘솔창은 형형색색으로 꾸며도 정말 촌스럽네요. ※소스 코드 #include #include #define RED (FOREGROUND_RED | FOREGROUND_INTENSITY) #define BLUE (FOREGROUND_BLUE | FOREGROUND_INTENSITY) #define PINK (RED | BLUE) #define WHITE (RED | GREEN | BLUE) #define GREEN (FOREGROUND_GREEN | FOREGROUND_INTENSITY) #define YELLOW (RED | GREEN) #define SKYBLUE (GREEN | BLUE) #define RED_BG (BACKGROUND_RED | BACKGROUND_INTENSITY) #define B.. 더보기 [C언어] 각 변수 타입별 printf 함수 서식 문자 printf 끝에 붙어 있는 f는 Formatting의 약자로써, 서식화된 출력을 한다는 뜻입니다. printf함수는 %로 시작하는 서식과 인수(변수)를 대응시켜 조립(Formatting)하는 과정을 거친 뒤 문자열로 출력합니다. 아래는 서식 표 입니다. 출처 책 : 혼자 연구하는 C/C++( page 86 )에 제가 조금 덧붙였습니다. 서식 의미 출력 타입 설명 %hd short integer unsigned short 부호없는 10진 정수 출력 %d 또는 %i Decimal, Integer int 10진 정수 출력 %ld long 10진 정수 출력 %lld long long 10진 정수 출력 %lu unsigned long 부호없는 10진 정수 출력 %I64d __int64 10진 정수 출력 %I64.. 더보기 memset 함수 사용시 주의사항 출처 : 잡동사니님 블로그 - 1Bytes 변수( char, unsigned char 등 )를 제외한 변수를 초기화 할 때는 0 이외의 값으로 초기화를 하면 안됨- new, malloc 등을 이용하여 동적으로 배열을 생성하는 변수가 있는 struct, class에서는 memset으로 초기화를 하면 안됨- CString은 절대 memset으로 초기화를 하면 안됨- virtual function을 가지고 있는 struct, class에서는 절대 memset으로 초기화를 하면 안됨 memset을 사용할 때 위 4가지 경우만 기억을 하고 있으면 문제없이 동작합니다. 각각에 대해서 간단하게 살펴보도록 하죠 -1Bytes 변수( char, unsigned char 등 )를 제외한 변수를 초기화 할 때는 0 이외의 .. 더보기 [C언어] 라인 단위 파일 쓰기 함수 - fputs ※요약fputs : 개방된 파일에 문자열을 라인 단위로 씁니다. ※특징개행 문자 '\n'을 자동으로 0x0D, 0x0A 값으로 변환한다. ※함수 원형 및 설명 int fputs( const char *string, FILE *stream ); //string : 파일에 쓸 NULL로 끝나는 문자열 버퍼의 포인터 //stream : 개방된 FILE 구조체의 포인터 //반환값 : 설공 시 0이나 양수, 실패 시 EOF(-1) ※예제 #include int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\Text.txt", "w+" ); if( pFile != NULL ) { for( int i=0 ; i 더보기 [C언어] 라인 단위 파일 읽기 함수 - fgets ※요약 fgets : 개방된 파일에서 텍스트 문자열을 한 줄씩 읽습니다. ※특징 - 파일 끝이나 개행 문자까지 읽는다. - 라인 끝(CR/LF)을 읽으면 개행 문자 '\n'으로 변환한다. - string 끝에 NULL문자를 추가한다. ※함수 원형 및 설명 char *fgets( char *string, int n, FILE *stream ); //string : 파일 데이터를 읽어서 저장할 버퍼의 포인터 //n : 읽을 최대 문자의 수 +1, 읽은 문자열의 끝에 NULL이 추가 //stream : 개방된 FILE 구조체의 포인터 //반환값 : 읽은 string의 포인터, 더 읽을 파일이 없거나 에러 시 NULL 포인터 ※예제 #include int main( ) { FILE *pFile = NULL; p.. 더보기 [C언어] 파일 열고 닫기 - fopen, fclose ※요약fopen : 파일에 대한 입력 및 출력을 합니다.fclose : fopen함수로 개방한 파일을 닫습니다. ※함수 원형 및 설명 FILE *fopen( const char *filename, const char *mode ); //filename : 개방할 파일의 경로 및 파일명 //mode : 파일 접근 권한(읽기 전용, 쓰기 전용 등 아래 표 참고) //반환값 : 개방된 파일의 FILE 구조체 포인터, 실패시 NULL포인터 int fclose( FILE *stream ); //stream : 개방된 FILE 구조체의 포인터 //반환값 : 성공 시 0, 실패 시 -1(EOF) ※모드 설명 모드 설명 r 읽기만 가능하며 파일이 존재해야 한다.존재하지 않을 경우 에러가 리턴된다. w 쓰기만 가능하며 .. 더보기 [C언어] 공백, 개행, 탭 문자 검사 - isspace ※요약isspace : 문자가 공백이나 개행, 탭인지 조사하는 함수 ※함수 원형 및 설명 int isspace( int c ); //c : 검사할 문자 또는 아스키 값 //반환값 : 문자가 공백이나 개행, 탭 문자이면 true, 아니면 false ※예제#include #include int main( ) { bool bCheck = false; char strTemp[] = " \n\t5"; bCheck = isspace( strTemp[0] ); printf( "%s\n", bCheck ? "True" : "False" ); bCheck = isspace( strTemp[1] ); printf( "%s\n", bCheck ? "True" : "False" ); bCheck = isspace( strTe.. 더보기 이전 1 2 다음