(WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR)

IT/Programming/WinAPI 2013. 7. 8. 07:38

strcpy -> wcscpy -> _tcscpy (문자열을 복사) 

strncpy -> wcsncpy -> _tcsncpy ( 사이즈 만큼 복사) 

strlen -> wcslen -> _tcslen (문자열 길이 확인)  

strcat -> wcscat -> _tcscat (두 문자열 이어 붙이기) 

strncat -> wcsncat -> _tcsncat (사이즈 만큼 이어 붙이기) 

strcmp -> wcscmp -> _tcscmp (문자열 비교) (반환 값(-1, 0, 1)) 

strncmp -> wcsncmp? -> _tcsncmp ( 사이즈 만큼 문자열 비교) 

stricmp -> wcsicmp -> _tcsicmp (대소문자를 구별하지 않고 문자열을 비교) 

strnicmp -> wcsnicmp -> _tcsnicmp (사이즈 만큼 대소문자를 구별하지 않고 문자열을 비교)

strchr -> wcschr -> _tcschr (문자 찾기) 

strrchr -> wcsrchr -> _tcsrchr (문자 찾기 (문자열 끝에서 부터 검색)) 

strstr -> wcsstr -> _tcsstr (문자열 찾기)

strpbrk -> wcspbrk -> _tcspbrk (문자 찾기 (두번째 인수를 찾고자 하는 문자들의 집합(문자열)으로 구성)   

strtok -> wcstok -> _tcstok (문자열 자르기 (두번째 인수를 집합(문자열)으로 구성 가능)) => 해당 문자가 NULL로 치환 됨

strset -> wcsset -> _tcsset (문자 치환, 첫째 인수의 모든 문자를 두번째 인수 문자로 변경함) => "abc" -> "bbb" 

strnset -> wcsnset -> _tscnset (사이즈 만큼 문자 치환) 

strupr -> wcsupr -> _tcsupr (대문자로 치환)

strlwr -> wcslwr -> _tcslwr (소문자로 치환) 

strrev -> wcsrev -> _tcsrev (문자열 역정렬) => "가나다라마" -> "마라다나가"

 

 

출처 : http://blog.naver.com/kilsu1024/110168931552

설정

트랙백

댓글

TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인

IT/Programming/WinAPI 2013. 7. 8. 07:07

되게 간단한건데, 왜 이리 자주 까먹는지 모르겠다.. -_-;

윈도우 프로그래밍에 익숙해지지 않아서인것 같다.

 

UNICODE 문자열 abc가 저장된다고 가정하면 아래와 같이 저장이 된다.

 

'a'\0 'b'\0 'c'\0 ...  (나의 조악한 표현에 묵념을..)

 

한 바이트마다 NULL 문자가 붙는 것이 특징인데,

printf()가 UNICODE를 지원하지 않아서 당연히 문자 하나밖에 출력이 되지 않는다.

 

자세한 설명이 있는 참고 링크 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=169408286&qb=dGNoYXIg7Lac66Cl&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=ROFP0F5Y7vlssaXBgdRssssssth-451584&sid=UdndiHJvLDsAAFnmOeY

설정

트랙백

댓글

_IO_str_overflow_internal 에러 발생 시

IT/Programming/Solution/Tip 2013. 7. 3. 07:07

리눅스 어플리케이션에서 _IO_str_overflow_internal 에러가 발생할 때, 오버플로우에 문제 해결의 주안을 맞추게 되는데 정작 원인은 동떨어져있을 경우가 있다. 오늘 새벽에 한 4시간 정도 삽질을 한 끝에야 원인을 찾을 수 있었는데, 잘못된 캐스팅으로 인하여 동적 메모리가 제대로 할당되지 않아 dangling pointer가 생성되었고, 해당 공간에 snprintf()를 수행하여 segmentation fault가 발생했던 것이다. 웃기게도 에러 메시지가 overflow 키워드를 담고 있어 완전 고생했다. 아무리 사이즈를 넉넉하게 줘도 오버플로우가 발생하길래 내가 꿈에서 코딩을 하고 있는건지 의심이 될 정도로..

 

하나씩 메모리 덤프를 까 볼 생각을 왜 못했을까. x/x buf 를 타이핑하고 엔터를 친 순간 탄식을 하지 않을 수 없었다.

아.. ㅠㅠ

설정

트랙백

댓글

iconv 에서 다이렉션 기호 사용 시 주의해야할 점

IT/Programming/Solution/Tip 2013. 6. 27. 17:52

iconv 를 사용할 때 다이렉션('>', '>>' 따위의 꺽쇠)기호를 사용할 때, 기존의 파일명에 그대로 출력을 진행하면 해당 파일이 0byte가 되는 문제가 있다. 버그인건지 아니면 내가 무언가 잘못 이해하고 있는지는 잘 모르겠다. 이 문제 때문에 꽤 오랜시간을 고생을 했는데, 아직까지도 무엇이 원인인지는 잘 모르겠다.

 

iconv [옵션] test.txt > test.txt  이렇게 기존에 있는 파일로 출력했을 때 문제가 발생한다. test_.txt 와 같이 새로운 파일로 출력시켜야한다.

설정

트랙백

댓글

(PHP) Cannot send session cache limiter - headers already sent

IT/Programming/PHP 2013. 6. 9. 08:41

Warning: session_start(): Cannot send session cache limiter - headers already sent


 

해당 에러는 session_start() 구문을 PHP 코드의 맨 위에 넣지 않아서 생기는 문제이다. 헤더가 구성될 때 세션이 구성이 되어야 하는데, 다른 php 작업들로 인하여 이미 헤더가 전송된 상태에서 세션을 전달할 수 없기 때문이다. 해결 방법은 간단하다. php 코드를 시작 부에 session_start() 를 넣어주면 된다.

 

<?php session_start(); echo("blahblah.."); ?>

만약, 그래도 문제가 지속된다면 php.ini 에서 output_buffering 속성을 on 으로 바꿔주고 웹 서버를 재시작하면 해결된다.

설정

트랙백

댓글

(javascript) getElementById()/getElementsbyName() 함수가 제대로 동작하지 않을 때

IT/Programming/Solution/Tip 2013. 6. 8. 08:39

getElementById() 와 getElementsByName() 은 DOM 접근을 위해 애용받는 함수다.

 

getElementById() :: http://www.w3schools.com/jsref/met_doc_getelementbyid.asp

getElementsByName() :: http://www.w3schools.com/jsref/met_doc_getelementsbyname.asp

 

이 두 함수를 사용해야할 때 주의할 점이 있는데, DOM 객체 접근을 위한 함수이다보니 HTML 이 로딩될 때 DOM 객체가 모두 로딩되기 전에 Javascript 단에서 DOM 객체 접근을 시도하면 값을 얻어오지 못하는 경우가 생긴다. 이런 경우 두 함수는 null 값을 반환한다. 제대로 작동하지 않는 것 같으면 리턴 값을 alert() 나 document.write() 등으로 확인해보자.

 

window.onload() 함수를 사용하여 HTML 이 완전히 로딩이 되고 나서 DOM 객체에 접근해야한다.

 

예제는 아래와 같다.

 

var email;
var phone;
var password;
var interest;

window.onload = function() {
 email = document.getElementById("email");
 phone = document.getElementById("phone");
 password = document.getElementsByName("password");
 interest = document.getElementsByName("interest");
}

설정

트랙백

댓글

Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByName'

IT/Programming/Solution/Tip 2013. 6. 8. 07:04

Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByName' 에러를 크롬 요소분석기 콘솔에서 만났을 때, 이런경우는 십중팔구 getElementsByNamegetElementByName 으로 타이핑하여 문제가 생긴 경우다. 보통 getElementById 를 같이 쓰다 보니깐 이런 실수를 하는 것 같다. ID는 유니크하지만 Name은 그렇지 않아 Element에 복수형태로 s가 붙는다.

 

예전에도 이것때문에 조금 고생했었는데 바보같이 이번에도 이것 때문에 너무 많은 시간을 쏟고야 말았다. -_-;;

바보같은게 아니고 바보인가보다.. 음.. ㅠㅠ

설정

트랙백

댓글

error LNK2019: _DumpRegs@0 외부 기호(참조 위치: _main@0 함수)에서 확인하지 못했습니다.

IT/Programming/Solution/Tip 2013. 5. 30. 12:09

이 포스트는 VIsual Studio 2008 이상 버젼에서 Irvine32 를 제대로 포함하고도 DumpRegs를 호출하지 못하는 문제점을 해결한다.

 

> Visual Studio 버젼에 맞는 어셈블리 개발환경 세팅을 갖추었고 Irvine32 디렉터리를 제대로 포함시켰을 경우를 전제로 한다.

 

요번에 잠깐 테스트할 일이 있어 Visual Studio 2008 Express에서 어셈블러 세팅을 하고 컴파일을 해보니 문제가 발생했다.

 

첫 번째 해결 방책)

INCLUDE Irvine32.inc 처럼 포함시킨 inc 파일이 있을 것이다. 대부분 상대경로로 지정해놓았을텐데, <절대경로>를 사용함으로써 문제를 해결한다.

=> (Irvine32.inc가 C:\Irvine\에 위치할 경우) 소스코드에서 INCLUDE C:\Irvine\Irvine32.inc 로 수정하여 빌드해본다.

 

두 번째 해결 방책)

 Irvine32.lib 와 같이 자신이 사용하고 있는 Irvine버젼에 맞는 lib파일을 INCLUDELIB 을 사용하여 <절대경로>로 포함시킨다.

=> (Irvine32.lib가 C:\Irvine\에 위치할 경우) 소스코드에서 INCLUDELIB C:\Irvine\Irvine32.lib 로 수정하여 빌드해본다.

(INCLUDELIB 구문을 사용하시지 않으셨다고 하더라도 INCLUDELIB 구문을 새로 작성하시면 됩니다.

INCLUDE 문도 절대경로로 적용시켜주세요.)

 

 

보아하니 이런 문제가 일어나는 시스템도 있고 문제 없이 빌드가 되는 시스템도 있던데 정확히 어떤 것이 원인이 되어 이 문제가 일어나는지는 잘 모르겠다. Irvine32.inc 파일을 살펴보니 DumpRegs가 제대로 포함되어 있으나 어셈블러에서 함수 경로를 제대로 찾아가지 못하는 문제가 일부 시스템에서는 발생하고 있는 것으로 보인다. 정확한 해결 원인을 아시는 분은 덧글로 알려주시면 감사의 말씀을 드리겠습니다.

설정

트랙백

댓글

pthread.h 를 포함했는데도 undefined reference to `pthread_create' 에러가 날때

IT/Programming/Solution/Tip 2013. 4. 5. 16:38

<그림 1> undefined reference to `pthread_create'

 

pthread 를 사용했을 때, 컴파일시 gcc 옵션에서 위와 같이 -o 옵션만 주게 되면 위와 같은 에러가 난다.

 

gcc 옵션에  -lpthread 인자를 주어 컴파일 하면 된다.

gcc -o 1 1.c -lpthread

 

 

<그림 2> -lpthread 옵션을 주고 나니 정상적으로 컴파일이 된다.

 

 

설정

트랙백

댓글

개인적으로 좋아하는 엑셀 함수 사이트

IT/Programming 2013. 3. 27. 02:32

http://www.techonthenet.com/excel/formulas

 

여러 사이트를 참고해보았지만 위 사이트가 가장 좋은 정보를 준다.

MS 공식 사이트에서 제공하는 Function 레퍼런스도 좋긴한데, 이 사이트가 가장 직관적으로 보여주고, 무엇보다도 어느 엑셀 버젼에 적용되는지 아주 잘 알려줘서 위 사이트를 애용하는 편이다.

'IT/Programming' 카테고리의 다른 글

git 을 웹에서 쉽게 배우자  (0) 2014.01.09
DDR1/DDR2/DDR3 외형차이  (0) 2013.07.31
Len Sassaman, 세상을 뜨다  (0) 2011.07.06
[FreeBSD] su 사용 권한 부여  (0) 2010.12.22
Software Wars  (0) 2010.05.01

설정

트랙백

댓글