문자 함수(ctype.h) 
 
1) 문자 판단 함수 
isalnum(문자): 영문자 또는 숫자인 경우만 참을 리턴 
isalpha(문자): 문자가 영문자인 경우만 참을 리턴 
isdigit(문자): 문자가 숫자인 경우만 참을 리턴 
islower(문자): 문자가 영어 소문자인 경우만 참을 리턴 
isupper(문자): 문자가 영어 대문자인 경우만 참을 리턴 
ispunct(문자): 문자가 기호문자인 경우에만 참을 리턴 
isspace(문자): 문자가 스페이스인 경우에만 참을 리턴 
isascii(int c): c가 ASCII이면 참값을 리턴 
iscntrl(int c): c가 control 문자이면 참값을 리턴 
isprint(int c): c가 인쇄 가능한 문자이면 참값을 리턴 
예제7) 문자 판단 함수 
#include <stdio.h> 
#include <ctype.h> 
int main() 
    char ch = 'A'; 
    if(isalnum(ch)) 
    {    printf("영문자 또는 숫자임\n"); } 
    else 
    { printf("영문자 또는 숫자 아님\n"); } 
 
 

    if(isalpha(ch)) 
    {    printf("영문자임\n"); } 
    else 
    { printf("영문자 아님\n"); } 
 
 

    if(isdigit(ch)) 
    {    printf("숫자임\n"); } 
    else 
    { printf("숫자 아님\n"); } 
 
 

    if(islower(ch)) 
    {    printf("소문자임\n"); } 
    else 
    { printf("소문자 아님\n"); } 
 
 

    if(isupper(ch)) 
    {    printf("대문자임\n"); } 
    else 
    { printf("대문자 아님\n"); } 
 
 

    if(ispunct(ch)) 
    {    printf("기호문자\n"); } 
    else 
    { printf("기호문자 아님\n"); } 
 
 

    if(isspace(ch)) 
    {    printf("스페이스임\n"); } 
    else 
    { printf("스페이스 아님\n"); } 
 
 

    if(isascii(ch)) 
    {    printf("ASCII 문자임\n"); } 
    else 
    { printf("ASCII 문자아님\n"); } 
 
 

    if(iscntrl(ch)) 
    {    printf("제어문임\n"); } 
    else 
    { printf("제어문자 아님\n"); } 
 
 

    if(isprint(ch)) 
    {    printf("프린트 가능\n"); } 
    else 
    { printf("프린트 불가능\n"); } 
return 0; 
}

 
 

 
 

2) 문자 변경 함수 
toascii(char c): 문자를 아스키 코드 값으로 변경 
tolower(char c): c를 소문자로 변환하는 함수 
toupper(char c): c를 대문자로 변환하는 함수 
 
 

예제8) 문자 변경 함수 
#include <stdio.h> 
#include <ctype.h> 
int main() 
    char ch = 'A'; 
    printf("ch의 ASCII 값 %d\n", toascii(ch)); 
    printf("ch를 소문자로 변경\n"); 
    ch = tolower(ch); 
    printf("ch = %c\n", ch); 
    printf("ch를 대문자로 변경\n"); 
    ch = toupper(ch); 
    printf("ch = %c\n", ch); 
return 0; 
}
Posted by cyj4369
,
문자열 함수(string.h) 
 
모든 시간 함수의 원형은 time.h 헤더 파일에 선언되어 있으므로 시간 관련 함수를 사용하려면 반드시 time.h를 인클루드 해야 합니다. 
 
 

char *strcpy( char *strDestination, const char *strSource ); 
Source의 문자열을 Destination에 복사 
char *strncpy( char *strDest, const char *strSource, size_t count ); 
Source의 문자열을 Destination에 n 만큼 복사 
 
 

예제9) strcpy 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str1[20] = "Good"; 
    char str2[20] = "Morning";
    char str3[20]; 
    strcpy(str3, str1); 
    printf("str3 = %s\n", str3); 
    strncpy(str3, str2, 4); 
    printf("str3 = %s\n", str3); 
return 0; 
 
 

}

 
 

char *strcat( char *strDestination, const char *strSource ); 
Source의 문자열을 Destination에 연결 
char *strncat( char *strDest, const char *strSource, size_t count ); 
Source의 문자열을 Destination에 n 만큼 연결 
 
char fruit[80] = "straw";
strcat(fruit, "berry"); 
 




예제10) strcat 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str1[20] = "Good"; 
    char str2[20] = "Morning";
    char str3[20] = "\0"; 
    strcat(str3, str1); 
    printf("str3 = %s\n", str3); 
    strncat(str3, str2,4); 
    printf("str3 = %s\n", str3); 
return 0; 
 
 

}

 
 

int strcmp(const char *string1, const char *string2 ); 
string1과 string2를 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별함 
int strncmp( const char *string1, const char *string2, size_t count ); 
string1과 string2를 count 만큼 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별함 
int stricmp( const char *string1, const char *string2 ); 
string1과 string2를 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별하지 않음 
int _strnicmp( const char *string1, const char *string2, size_t count ); 
string1과 string2를 count 만큼 비교해서 같으면 0 앞의 문자열이 크면 1 뒤의 문자열이 크면 -1을 반환, 대소문자를 구별하지 않음 
 
 

예제11) strcmp 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str1[20] = "Good"; 
    char str2[20] = "Morning"; 
    printf("%d\n", strcmp(str1, str2)); 
    strcpy(str2, "Good Morning"); 
    printf("%d\n", strncmp(str1, str2,4)); 
    strcpy(str2, "good"); 
    printf("%d\n", strcmp(str1, str2)); 
    printf("%d\n", stricmp(str1, str2)); 
    printf("%d\n", strnicmp(str1, str2,4)); 
return 0; 
}

 
 

char *strset( char *string, int c ); 
string 문자열을 c 문자로 채움 
char *strnset( char *string, int c, size_t count ); 
string 문자열 중 count에 해당하는 만큼 c 문자로 변경 
 
 

예제12) strset 
#include <string.h> 
#include <stdio.h> 
int main( ) 
char string[] = "Fill the string with something"; 
printf( "Before: %s\n", string ); 
strset( string, '*' ); 
printf( "After: %s\n", string ); 
strnset( string, '?', 4 ); 
printf( "After: %s\n", string ); 
return 0; 
 
 

}

 
 

strlwr( char *string ); 
string 문자열을 소 
예제13) strs 문자로 변경 
char * strupr( char *string ); 
string 문자열을 대문자로 변경 
size_t strlen( const char *string ); 
string 문자열의 글자 수 반환 
 
 

예제13) strlwr 
#include <string.h> 
#include <stdio.h> 
int main() 
char string[] = "Fill the string with something"; 
int location; 
printf("string의 소문자 %s\n", strlwr(string)); 
printf("string의 대문자 %s\n", strupr(string)); 
printf("string의 메모리 사이즈 %d\n", sizeof(string)); 
printf("string의 문자 수 %d\n", strlen(string)); 
return 0; 
 
 

}

 
 

char * strchr( const char *string, int c ); 
string에서 문자 c의 메모리 위치 반환 
char *strrchr( const char *string, int c ); 
string에서 문자 c의 메모리 위치 반환(뒤에서부터 검색) 
 
 

예제14) strchr를 이용해서 문자열에서 첫 번째 검색 위치를 찾아내는 프로그램 
#include <stdio.h> 
#include <string.h> 
int main() 
    char str[256] = "My name is Park Moon Seok"; 
char *ptr; 
    char ch; 
    int result; 
    while(1) 
    { 
        printf("찾고자 하는 문자를 입력하세요=>"); 
        ch = getchar(); 
        fflush(stdin); 
        printf("1. 앞에서 2. 뒤에서=>"); 
        menu = getchar(); 
        ptr = strchr(str, ch); 
        result = ptr - str + 1; 
 
 

            if(ptr != NULL ) 
            { 
    printf( "Result: 첫번째 %c 발견위치 = 앞에서 %d 번째\n", ch, result ); 
            } 
            else 
            { 
             printf( "Result:%c는 없습니다\n", ch ); 
            } 
    return 0; 
}

strrchr은 뒤에서부터 검색하게 되는데 위치를 리턴 하므로 문자가 하나만 있는 경우는 같은 결과가 나올 것이고 o를 검색하면 다르게 나올 것 입니다. 
예제15) strchr를 이용해서 문자열에서 o의 개수를 알아내는 프로그램 
#include <stdio.h> 
#include <string.h> 
int main() 
char str[256] = "My name is Park Moon Seok"; 
char *ptr = str; 
unsigned int i,count=0; 
for (i=0;i<strlen(str);i++) 
     { 
ptr = strchr(ptr,'M'); 
if (ptr == NULL) 
         { 
break; 
count++; 
         ptr ++; 
printf("입력한 문자열에는 o가 %d개 있습니다.\n",count); 
}

 
 

char *strstr( const char *string, const char *strCharSet ); 
string에서 문자열 strCharSet의 메모리 위치 반환 
strcmp는 전체 일치하는 문자열은 검색할 수 있지만 부분 일치는 알아낼 수 없습니다. 
부분 일치를 찾아 낼 때 사용하는 함수 입니다. 
char *strpbrk( const char *string, const char *strCharSet ); 
string에서 문자열 strCharSet 중 첫 번째 나오는 메모리 위치 반환 
예제16) strstr, strpbrk를 이용해서 문자열에서 문자열을 검색하는 프로그램 
#include <stdio.h> 
#include <string.h> 
int main() 
char str[256] = "My name is Park Moon Seok"; 
char *ptr; 
unsigned int result; 
ptr = strstr(str,"name"); 
         result = ptr - str + 1; 
if(ptr != NULL ) 
            { 
        printf( "Result: name 발견위치 = 앞에서 %d 번째\n", result ); 
            } 
            else 
            { 
             printf( "Result: name은 없습니다\n"); 
            } 
         ptr = strpbrk(str,"xyz"); 
         result = ptr - str + 1; 
if(ptr != NULL ) 
            { 
        printf( "Result: xyz 중 하나 발견위치 = 앞에서 %d 번째\n", result ); 
            } 
            else 
            { 
             printf( "Result: xyz는 없습니다\n"); 
            } 
    return 0; 
}

char *strtok(char *strToken, const char *strDelimit); 
strToken을 strDelimit 단위로 분할해주는 함수 
 
 

예제17) strtok를 이용해서 공백을 기준으로 분할하는 예제 
#include <string.h> 
#include <stdio.h> 
char string[] = "My name is Park Moon Seok"; 
char *token; 
int main( ) 
token = strtok(string," "); 
while( token != NULL ) 
printf( "%s\n", token ); 
     token = strtok(NULL, " "); 
return 0; 
}
Posted by cyj4369
,
메모리 관리 함수(memory.h) 
 
C에서는 메모리를 관리할 수 있는 함수를 제공합니다. 
1)memset 
void *memset(void *dest, int c, size_t count); 
dest을 c로 count 만큼 채워주는 함수 
일반적으로 c자리에 0을 이용해서 메모리를 초기화하는데 이용 
 
 

2)memcpy 
void *memcpy(void *dest, const void *src, size_t count ); 
dest 을 src의 내용으로 count 만큼 복사해 줌 
 
 

3)memmove 
void *memmove(void *dest, const void *src, size_t count); 
dest 을 src의 내용으로 count 만큼 복사해 줌 
 
 

예제20) 
#include
<memory.h> 
#include
<string.h> 
#include
<stdio.h> 
int main() 
    char str1[7] = "aabbcc"; 
printf( "이전 문자열: %s\n", str1 ); 
memcpy( str1 + 2, str1, 4 ); 
printf( "새로운문자열: %s\n", str1 ); 
strcpy( str1, "aabbcc" ); 
printf( "이전 문자열: %s\n", str1 ); 
memmove( str1 + 2, str1, 4 ); 
printf( "새로운문자열: %s\n", str1 ); 
    return 0; 
}
Posted by cyj4369
,
난수 함수(stdlib.h) 
 
난수(Random Number)란 무작위로 만들어지는 알 수 없는 값을 말합니다. 
어떤 값을 가지게 될 지 예측할 수 없는 수라는 뜻인데 이런 난수가 필요한 이유는 말 그대로 예측을 허용하지 않기 위해서입니다. 
 
 

int rand(void); 
void srand(unsigned int seed); 
 
 

rand 함수는 0~RAND_MAX 범위의 수 중에서 무작위로 한 수를 생성해 냅니다. 
RAND_MAX는 컴파일러에 따라 다르지만 일반적으로 32767(0x7ffff)로 정의되어 있습니다. 그래서 rand 함수를 호출하면 0부터 32767중의 임의의 정수 하나가 리턴 됩니다. 
 
 

예제2) 5개의 숫자를 랜덤하게 추출해주는 예제 
#include <stdio.h> 
#include <stdlib.h> 
int main() 
    int i; 
    printf("rand()의 결과는 0부터 %d까지의 랜덤한 수\n", RAND_MAX); 
    for(i=0; i<5; i++) 
    { 
        printf("[%d]번째 수: %d\n", i+1, rand()); 
    } 
    return 0; 
}

위의 예제는 5개의 랜덤한 수를 추출하지만 계속 수행해 보면 항상 동일한 결과를 출력합니다. 
rand 함수는 일정한 난수 생성 규칙(seed)에 따라 난수를 생성하는데 난수 생성 규칙이 항상 같기 때문에 난수가 생성되는 순서도 항상 같게 됩니다. 
난수 생성 규칙에 변화를 줄 수 있는 함수가 srand라는 함수입니다. 
srand는 난수 발생기에 난수를 발생시키는 시작점(seed)를 제공하며 난수 발생기는 이 시작점을 기준으로 하여 난수를 발생시키게 됩니다. 
따라서 시작점을 바꾸면 생성되는 난수도 달라집니다. 
즉 srand 함수의 매개변수로 정수 값을 넣어주면 생성되는 숫자가 달라지게 됩니다. 
그러나 이렇게 하더라도 시작점이 동일하면 생성되는 난수에는 일정한 규칙이 존재할 수밖에 없습니다. 
완전한 난수를 만들기 위해서는 난수 생성기에게 전달되는 시작점 또한 예측 불가능한 난수여야 합니다. 
이러한 이유로 시간 값을 시작점으로 사용한다면 완전한 난수를 만들 수 있습니다. 
따라서 위의 예제에 숫자를 추출해 내기 전에 
srand((unsigned)time(NULL)); 문장을 삽입하면 완전한 난수가 추출될 것 입니다. 
 
 

또한 일정한 범위 안의 난수를 추출할 수 도 있습니다. 
가령 1부터 10까지의 난수 추출이라면 
rand() % 10 +1 이렇게 하면 됩니다. 
 
 

예제3) 1부터 100까지 짝수만 5개 추출하는 예제 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int main() 
    int i; 
    srand((unsigned)time(NULL)); 
    for(i=0; i<5; i++) 
    { 
        printf("[%d]번째 수: %d\n", i+1, (rand()%50+1)*2); 
    } 
    return 0; 
}
Posted by cyj4369
,
맥과 이클립스의 단축키가 충돌해서 불편할 경우가 많습니다. 이클립스의 가장 강점이라고 할 수 있는 ^(control) space가 맥의 우측상단에 있는 spotlight와 겹칩니다.



맥의
 환경설정에서 spotlight 선택하고 윈도우 하단에 있는 단축키 설정을 ^+커맨드+space로 바꿨습니다.
일단 일차적으로 맥과 이클립스의 충돌을 해결해봅니다.

'Development > eclipse' 카테고리의 다른 글

[jsp에서 onClick 이벤트 정리]  (0) 2011.11.26
[eclipse, tomcat, oracle 설치]  (0) 2011.11.20
[파레트]  (0) 2011.10.26
Posted by cyj4369
,

[파레트]

Development/eclipse 2011. 10. 26. 19:29
http://code.google.com/intl/ko/javadevtools/download-wbpro.html

이클립스상에서 화면구성할 때 비베같이 드래그&드롭으로 만드는 툴 install 
Posted by cyj4369
,

[ODBC 설정]

Development/Database 2011. 10. 26. 19:25
제어판 - 관리도구 - 데이터 원본(ODBC) - 추가 - 맨아래 SQL SERVER선택 - 마침
- 식별할수 있는 이름, 식별하기 위한 설명, 서버에 316AF959ABFD4D9\JYJ 
다음 - 사용자가 입력한...선택 - 아이디: sa 비밀번호: 설치할때 적은 비밀번호 - 다음
master 있는 항목 체크 - 확인 - 테스트 - 확인

Posted by cyj4369
,
*HOSTENT*

 
HOSTENT 구조체는 윈도우즈 소켓 시스템에 할당됩니다. 애플리케이션에서는 이 구조체를 수정하거나 내용을 비워서는 안 됩니다. 
또한 각각의 쓰레드에 대하여 이구조체의 한개의 카피본 만이 할당되어야 합니다. 유효성은 다른 윈도우즈 소켓 함수가 호출될 때 까지만 보장되므로 애플리케이션은 이 정보가 필요하다면, 다른 윈도우즈 소켓 함수가 호출되기 전에 특정한 정보를 카피해야 합니다.
 gethostbyname, gethostbyaddr함수 사용시 hostent구조체가 반환됩니다.
 
 
 
struct hostent { 
        char FAR *              h_name; 
        char FAR * FAR *     h_aliases; 
        short                       h_addrtype; 
        short                       h_length; 
        char FAR * FAR *     h_addr_list; 
};
 
 
 
*Members*
 
h_name
호스트의 공식적인 이름입니다. 만약 DNS 나 그와 유사한 시스템이 사용되었을 때, 이 멤버는 FQDN(Fully Qualified Domain Name)을 가지게 됩니다.
 
h_aliases
호스트 이름과 관계되는 이름(앨리어스)으로, 널로 끝나는 스트링 배열 입니다.
 
h_addrtype
어드레스 타입을 지정하는데, 윈도우즈 소켓의 경우 항상 PF_INET 입니다.
 
h_length
각 어드레스의 길이를 지정하며, PF_INET 어드레스에 대해 항상 4 입니다.
 
h_addr_list
널 문자로 끝나는 호스트의 주소 리스트입니다. 주소는 네트웍 바이트 오더 입니다. 또한 이전 소프트웨어와 호환을 위해서 h_addr_list[0]을 의미하는 h_addr 매크로가 정의되어 있습니다.
 
 
 
*See Also*
 
overview, PROTOENT, SERVENT

Posted by cyj4369
,
*WSACleanup*
WSACleanup 함수는 WS2_32.DLL의 사용을 종료하는 함수입니다.
int WSACleanup (void);
 
*Remarks*
이 함수가 사용되기 전에 WSAStartup함수의 성공적이 수행이 있어야 합니다. 이 함수는 WSAStartup함수로 윈속을 초기화 하고 윈도즈 소켓을 다 사용하고 나서 사용한 소켓 리소스를 반환할 때 사용되는 함수이므로 반드시 윈도즈 소켓 사용후에 더 이상 소켓 자원이 필요 없을 때, 꼭 호출되어야 합니다. 
또한 이함수가 수행될 때, 블록킹 상태에 있는 처리나, 비동기 작업은 통지 메시지나 이벤트의 포스팅 작업이 없이 바로 취소됩니다. 결국 완벽한 작업을 끝마치지 못한 상태에서 중지되는 것이라 하겠죠. 이러한 경우 연산은 실패로 돌아가고, WSA_OPERATION_ABORTED라는 에러코드를 발생하게 됩니다.
WSACleanup함수가 호출되었을 때 개방된 소켓은 리셋되고 WSACleanup함수가 호출되기 전에 closesocket 함수에 의해 닫힌 소켓은 정상적으로 닫히게 됩니다. 이 때 소켓은 전송 큐에 걸려 있는 데이터를 여전히 가지게 됩니다. WSACleanup 함수가 호출되지 않을 경우 걸려있는 데이터는 그대로 전송되게 됩니다.
참고의 말씀을 드리자면, 이렇게 걸려있는 데이터(pending data)를 다 전송하도록 하려면, 접속을 종료하기 위해 shutdown 함수를 호출해야 합니다. 이렇게 하면 걸려있는 데이터를 모두다 전송 할 때까지 대기하게 되고, 그다음에 closesocket 그리고, WSACleanup 함수를 호출하게 된다면, 아주 이상적으로 소켓을 종료 할 수 있습니다.
블록킹 후크 상태에서 WSACleanup 함수를 호출하려면, 먼저 WSACancelBlockingCall 함수를 먼저 호출하고 나서 WSACleanup 함수를 호출해야만 한다는 점 주의하시구요. 음... 또 주의 해야 할점은 멀티 쓰레드 환경에서, WSACleanup 함수의 호출은 모든 쓰레드에 대해서 윈속 연산을 종료시킨 다는 것입니다.
 
*Return Values*
성공할 경우 0을 반환하고, 에러가 발생할 경우 SOCKET_ERROR 에러가 반환되고, WSAGetLastError 함수를 호출해서 특정한 에러코드를 얻어낼 수 있습니다.
 
*Error Codes*
WSANOTINITIALISED 이 함수를 사용하기 이전에 WSAStartup 함수를 성공적으로 호출해야 합니다.
WSAENETDOWN 네트웍 서브 시스템에서 에러가 났습니다.
WSAEINPROGRESS 블럭킹 윈속 v1.1이 진행상태에 있거나, 서비스 프로바이더가 아직 콜백함수를 진행하고 있습니다.
 
*QuickInfo*
Windows NT : 사용가능
Windows : 사용가능
Windows CE : 버젼 1.0 그리고 그이후의 버젼에서 사용가능
Header :
          Win16/32 : winsock.h
          Win32-II : winsock2.h
Import Library :
          Win16 : winsock.lib
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib

*See Also*
overview, closesocket, shutdown, WSAStartup

<출처>
http://blog.naver.com/a71045851?Redirect=Log&logNo=150002011123
Posted by cyj4369
,
윈도우 소켓을 이용하는 서비스의 종류에는 HTTP, FTP, GOPHER, TCP/IP 등의 프로토콜 서비스가 있다.
언급한 서비스 중 하나라도 사용을 원한다면, 윈도우 소켓을 사용할 수 있도록 초기화 작업을 해야한다.


윈도우 소켓을 초기화하는 함수로는 WSAStartup 함수 하나 밖에 없다. 
소켓 관련 함수를 사용하기 전에 가장 먼저 이 함수를 호출한다. 
WSAStartup 함수는 Ws2_32.dll 함수를 응용 프로그램의 영역으로 로드한다.
(#pragma comment(lib, "ws2_32.lib") 필요...)
더불어 로드한 dll 파일로부터 사용할 수 있는 윈도우 소켓의 최상위 버전을 알아내거나 어떤 버전의 소켓을 사용할 것인지 
알려주는 역할도 함께한다. 
 
WSAStartup 함수의 호출이 실패할  경우, 윈도우 소켓을 반드시 사용해야 하는 프로그램이라면 어쩔 수 없이 프로그램을 종료해야 한다.
아니면, 지원되지 않는 버전을 사용하겠다고 요청했다면, 하위 버전으로 호출이 성공할 때까지 계속적으로 시도할 수 있다.
그러나, 이 함수는 기본적으로 Ws2_32.dll 파일을 사용하기 때문에, Ws2_32.dll 파일은 반드시 존재해야 한다.
 
 
WSADATA 구조체 변수는 WSAStartup 함수가 반환하는 윈도우 소켓의 세부 정보의 저장에 사용된다.

사용예>
WSADATA wsaData;
 if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
  return -1;
Posted by cyj4369
,