IanMK2 Blog


printf

어떤 언어로 공부를 시작하던지 가장 먼저 배우는 것은 바로 화면에 Hello World를 띄우는 것입니다.
C를 시작할때 가장 먼저 배우는 함수인 printf함수.

int printf( const char *format [, argument]... );
이게 바로 printf의 원형이죠.
const char *format에는 문자열을,  두번째인자에는 출력하고 싶은 변수들을 지정해주죠.

c를 배우던 중 가끔씩 생각했습니다. 
"printf인자안에 있는 ... 를 이용하면 편할 것같은데.." 라고 말이죠.
이걸 언제나 생각만 했지 실제로 찾아본적은 없었습니다.
그러다 얼마전 ... 이것을 Ellipsis notation이라고 부른다는 것을 알게 되었고 써먹는 방법을 찾게 되었습니다.

생각보다 간단하더군요.

int sum(int nCnt, ...)
{
int i = 0;
int s = 0;
for( i = 0; i<nCnt ; i++)
s += (&nCnt)[i+1];
return s;

}
int main()
{
int s = sum(5,1,3,4,2,5);
printf("%d",s);

return 0;
}

위와 같이 프로그램 소스가 있다고 하죠.
sum함수의 인자를 보면 첫번째는 더할 수의 갯수를 두번째는 Ellipsis notation이 들어간걸 볼 수 있습니다.
도대체 인자가 ... 인데 어떻게 여기에 들어가는 변수에 접근할까 라는 생각을 했었는데
답은 포인터였내요.

다시 sum함수를 보면 for문안에서 nCnt의 주소에서 포인터에 +i만큼 더하여 ... 인자에 접근을 하는 것을 볼 수 있습니다.
따라서 당연히 첫번째 인자는 고정된인자가 필요하게 되죠.
인자를 ...만 넣게되면 상큼한 에러를 보게됩니다.


Posted by IanMK2

CFileDialog을 생성 후 DoModal을 하기 전에 

CFileDialog의 m_ofn에 초기 경로명을 설정


fileOpenDlg.m_ofn.lpstrInitialDir = "c:\\디폴트폴더";

Posted by IanMK2

TCHAR path[_MAX_PATH];

GetModuleFileName(NULL, path, sizeof path);

 

CString strPath = path;

int i = strPath.ReverseFind('\\');//실행 파일 이름을 지우기 위해서 왼쪽에 있는 '/'를 찾는다.

strPath = strPath.Left(i);//뒤에 있는 현재 실행 파일 이름을 지운다.

AfxMessageBox(strPath);

 


CFileDialog 생성시


OFN_NOCHANGEDIR <== 이 옵션을 주어서 생성하면 바뀌지 않는다.

 

MFC에선
char CurrentDIR[_MAX_PATH];
 GetCurrentDirectory(_MAX_PATH,CurrentDIR);
으로 간단하게

Posted by IanMK2

함 수 명
 인  자
 결  과
 
PathAddBackslash
 c:\path1
 c:\path1\
  

PathCompactPath
 c:\path1\path2\path3\file.txt
 c:\path1\...\file.txt
 
PathFileExists
 c:\path1\file.txt
 파일의존재유무[T/F]
 
PathFindFileName
 c:\path1\path2\file.txt
 file.txt
 
PathIsDirectory
 c:\path1\path2
 디렉토리유무[T/F]
 

PathRemoveBackslash
 c:\path1\path2\
 c:\path1\path2
 
PathRemoveBlanks
 “ c:\path1\path2 “
 “c:\path1\path2”
 
PathRemoveExtension
 c:\path1\path2\file.txt
 c:\path1\path2\file
 
PathRemoveFileSpec
 c:\path1\path2\file.txt
 c:\path1\path2
 
PathRenameExtension
 c:\path1\path2\file.txt
 c:\path1\path2\file.changed
 
PathStripPath
 c:\path1\path2\file.txt
 file.txt




BOOL PathCompactPath( HDC hDC, LPTSTR lpszPath, UINT dx );

lpszPath에 포함된 경로 문자열을 dx pixel 크기에 출력하기 적절하게 잘라준다.
C:\path1\path2\sample.txt
C:\path1\...\sample.txt
C:\p...\sample.txt




BOOL PathFileExists( LPCTSTR pszPath );

제시된 경로의 파일/폴더가 실제로 존재하는지 검사한다.


LPTSTR PathFindExtension( LPCTSTR pPath );

파일 경로에서 확장자를 찾아준다. (pPath에서 확장자가 시작되는 위치를 반환).


LPTSTR PathFindFileName( LPCTSTR pPath );

파일 경로에서 파일 이름을 찾아준다. (pPath에서 이름이 시작되는 위치를 반환).


BOOL PathFindOnPath( LPTSTR pszFile, LPCTSTR *ppszOtherDirs );

파일을 검색한다. 만약 검색에 성공하면 pszFile에는 해당 파일의 전체 경로가 담겨져서 반환된다.
ppszOtherDirs가 NULL이라면 windows 기본 경로(system32, 환경 변수 path의 값 등)에서 파일을 검색한다.
주의: 여러개의 파일이 존재 하더라도, 첫번째로 검색된 파일의 경로만 반환한다.


BOOL PathIsDirectory( LPCTSTR pszPath );

실제로 존재하는 폴더인지 확인한다.



BOOL PathRelativePathTo( LPTSTR pszPath, LPCTSTR pszFrom, DWORD dwAttrFrom, LPCTSTR pszTo, DWORD dwAttrTo );

pszFrom에서 pszTo로 가는 상대경로를 구해서 pszPath에 담아준다. 당연한 소리지만 pszFrom과 pszTo는 동일한 Prefix에서 시작해야 한다.
TCHAR buffer[MAX_PATH];
BOOL PathRelativePathTo( buffer, "c:/a/b/c/", FILE_ATTRIBUTE_DIRECTORY, "c:/a/1/2/test.txt", FILE_ATTRIBUTE_NORMAL);
buffer = "../../1/2/test.txt";



LPTSTR PathRemoveBackslash( LPTSTR lpszPath );

경로 맨 끝에 back slash(\)가 있다면 지워준다.



void PathRemoveExtension( LPTSTR pszPath );

확장자를 제거한다.



void PathUnquoteSpaces( LPTSTR lpsz );

경로를 둘러싼 큰 따옴표(")를 제거해 준다.
PathUnquoteSpaces("\"c:\temp\"") = c:\temp



int UrlCompare( LPCTSTR pszURL1, LPCTSTR pszURL2, BOOL fIgnoreSlash );

두 URL 문자열을 비교한다. (대소문자 구분 없음)



HRESULT UrlEscape( LPCTSTR pszURL, LPTSTR pszEscaped, LPDWORD pcchEscaped, DWORD dwFlags );

URL로 사용할 수 없는 문자들(^, {, " 등)을 URL encoding된 문자열로 변환해 준다.


HRESULT UrlEscapeSpaces( LPCTSTR pszURL, LPTSTR pszEscaped, LPDWORD pcchEscaped );

URL에 포함된 공백을 escapce처리


HRESULT UrlGetPart( LPCTSTR pszIn, LPTSTR pszOut, LPDWORD pcchOut, DWORD dwPart, DWORD dwFlags );

dwPart값에 따라 URL에서 특정부분을 분리해 준다. (hostname, port...)


BOOL UrlIs( LPCTSTR pszUrl, URLIS UrlIs );

URL이 UrlIs에 제시된 조건(적합한 URL인가? 파일 경로인가? 등)에 맞는 구성인지 확인한

출처 : http://blog.naver.com/aquayo/80049129601

 

Posted by IanMK2