JC Tailor

블로그 이미지
컴퓨터를 사랑하자.~
dkcjs3

Article Category

분류 전체보기 (52)
프로그램방법론 (0)
Tailor 이야기 (0)
C언어 이야기 (49)
C++ 이야기 (1)
API 이야기 (0)
MFC 이야기 (0)
Window XP 이야기 (0)
컴퓨터정보 (1)
나의 삶 이야기 (1)
UNIX (0)

Recent Comment

Calendar

«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Archive

  • Total25,060
  • Today1
  • Yesterday4

strcpy함수는 전체 문자열을 다른 메모리 영역으로 복사한다.


*함수 원형


char *strcpy(char *복사시킬 문자열, char *원래 문자열);


복사시킬 새로운 문자열의 포인터를 돌려준다.



/*'strcpy'의 사용 예*/

#include
#include
#include

char source[]="The source string.";

int main()
{
    char dest1[80];
    char *dest2, *dest3;
   
    printf("source : %s", source);
   
    /*dest1이 80바이트의 할당된 공간을 지적하므로*/
    /*dest1로의 복사는 정상적이다.*/
   
    strcpy(dest1, source);
    printf("\ndest2 :  %s", dest1);
    
    /*dest2로 복사하기 위해서 공간을 할당해야 한다.*/
   
    dest2 = (char*)malloc(strlen(source)+1);
    strcpy(dest2, source);
    printf("\ndest2 :  %s", dest2);
   
    /*대상 공간을 할당하지 않고 복사하는 것은 좋지 않다.
    다음은 심각한 문제를 일으킬 수 있다.*/
   
    /*strcpy(dest3, source);*/
   
    getchar();
   
     return 0 ;

}



strncpy함수는 복사할 문자의 개수를 지정할 수 있다.


*함수 원형


char strncpy(char *복사시킬 문자열, char *원래 문자열, size_t 개수);


역시 복사시킬 문자열의 포인터를 돌려준다.


/*'strncpy'의 사용 예*/

#include
#include

char *dest = "..........................";
char *source = "abcdefghijklmnopqrstuvwxyz";

int main()
{
    size_t n;
   
    while(1)
    {
        puts("Enter the number of characters to copy (1-26)");
        scanf("%d", &n);
       
        if(n>0 && n<27) break;
       
    }
   
    printf("\nBefore strncpy destination = %s", dest);
   
    strncpy(dest, source, n);
   
    printf("\nAfter strncpy destination = %s", dest);
   
    getchar();
   
    return 0;
   
}


.. 이 소스는 될런지 모르겠다.

분명 정확히! 적었는데 아무리 해도 되지를 않고

디버그를 해봐도 segmentation fault로 나와 고생고생 쌩난리를 쳐도 안되더라(..)


결국 마음속으로 '컴파일러가 이상한거야, 그런거야!'를 되풀이하며 묻어버렸다.(...)

에러만 나면 무조건 컴파일러의 탓만 하는 안좋은 습관이 생겼다.OTL


strdup은 알아서 malloc()함수를 호출하여 목적 문자열을 저장하기 위한 메모리 영역을 할당한다.


char *strdup(char *source);


strdup은 목적 문자열에 대한 포인터를 돌려준다.

strdup은 ANSI 표준 함수가 아니다! (그런데도 잘만 되더라,)


/*'strdup'의 사용 예*/
#include
#include
#include

char *source = "The source string";

main()
{
    char *dest;
   
    printf("Source = %s", source);
   
    if((dest = strdup(source)) == NULL){
        fprintf(stderr, "Error allocating memory.");
        exit(1);
    }
   
    printf("\nDestination = %s", dest);
   
    getchar();
   
    return 0;
}


strlib에 있는 exit함수는

'닭치고 종료'의 기능을 한다.

인수가 0이면 '정상 종료'를,

1이면 '비정상적인 종료'를 의미한다.


맨 끝의 getchar은

dev C++에선 Visual C++와는 달리 실행 파일에 'Press any key to continue'따위가 나오지 않고

출력 하자마자 볼 새도 없이 곧장 꺼져버버리길래, 그냥 확인용으로.

Visual C++에선 쓸 필요가 없는 녀석.

신고
Trackback 0 and Comment 1
prev Prev : [1] : [···] : [4] : [5] : [6] : [7] : [8] : [9] : [10] : [11] : [12] : [···] : [52] : Next next

Tag Cloud


티스토리 툴바