14 - String Function

<학습하기>


문자열의 초기화

1.문자 포인터
char *string = "Nexlice";
문자형 포인터에 문자열 저장.

2.문자 배열
char string[] = "Nexlice";
문자 배열에 문자열 저장. 자동으로 7글자를 저장할 수 있는 칸을 만든다.

문자열은 본질적으로 문자열이 저장된 메모리 포인터를 조작하는 방법이므로
문자열을 함부로 조작하면 원본 문자열까지 바뀌게 된다.
그러므로 문자열을 조작하기 위해서는 문자열을 조작하는 함수를 사용해야 한다.

문자열 조작 함수

1. strcpy, strncpy : STRing CoPY - 문자열을 복사하는 함수.

형식
strcpy(복사될 메모리, 원본문자열);
strncpy(복사될 메모리, 원본문자열, 메모리 크기);

strncpy는 [복사될 메모리]의 크기까지 입력을 해서,
원본문자열이 매우 길더라도 [복사될 메모리]의 크기까지만 복사하도록
(할당된 메모리를 넘어 복사되는 일이 없도록) 하는 함수.

2.strcat, strncat : STRing conCATenate - 문자열을 합치는 함수.

형식
strcat(복사될 메모리, 합칠 문자열);
strncat(복사될 메모리, 합칠 문자열, 메모리 크기);

기본적으로 strcpy와 같으나, 복사될 메모리의 문자열 끝 ('\0'위치)부터 복사 실행.
결과적으로 두 문자열이 결합돈 형태의 새로운 문자열이 만들어진다.
strncat 역시 strncpy처럼 복사될 메모리의 크기를 받아서
할당되지 않은 메모리가 훼손되는 일을 방지한다.

3.strcmp, strncmp : STRing CoMPare - 문자열을 비교하는 함수.

형식
strcmp (문자열A, 문자열B);
strncmp(문자열A, 문자열B, 비교길이);

반환값 : 정수형
둘이 동일한 문자열이라면 0,
차이가 있을 경우, 사전순서에 따라 -1 또는 1

strncmp의 경우는 문자열 끝까지가 아니라 [비교길이] 만큼만 비교해서 결과반환.

4.strlen : STRing LENgth - 문자열의 길이를 반환하는 함수

형식
strlen(문자열)

반환값 : 정수형

문자의 끝(\0)이 나올 때까지 몇개의 문자가 존재하는지 반환.

5.strchr, strrchr : 문자열에서 특정한 문자가 나오는 위치 찾기.

형식
strchr(문자열, 문자);

반환값 : 해당 문자가 나타나는 주소. - 해당 문자로 시작되는 문자열

strchr은 [문자]를 문자열 앞부터, 
strrchr은 문자열 뒤부터 찾기 시작하며 [문자]가 포함되어 있지 않으면 NULL리턴.

<실습하기>

#include <stdio.h>

#include <string.h> //문자열 관련 함수들이 정의되어 있는 헤더 파일.

//void strcpy (char *, char*); // 위의 헤더파일을 사용하면 이렇게 따로 정의를 안해도 된다.

main()

{

char strA[] = "hello, world!";
char *strB = strA;

*strB= 'H';

puts("문자열의 포인터 대입");
printf("strA : %s\n", strA);
printf("strB : %s\n", strB);

// strA는 h로 시작했는데 strB를 H로 했더니 strA마저 변경됨.



{// 변수를 선언하기 위한 블럭.
char string[20];
char string2[20];

puts("strcpy 테스트");
printf("복사 전 : %s\n", string);

strcpy(string, "Hello, World");
//string = "Hellom World";
strcpy(string2, string);
//string2 = string;

*string2 = 'h';

printf("복사 후  : %s\n", string);
printf("복사 후  : %s\n", string2);




strncpy(string , "Hello, Welcome to the C world, Let's program!!!",20); 
// strncpy를 쓰지않고 strcpy를 쓰면 오류가 날 수 있다.
//저장할 수 있는 메모리를 넘어갈수 있기 때문.
//string이라는 배열에 20바이트가 할당되어 있으므로
//최대 20개 문자만 복사하라.
printf("긴 문자열 복사 후 : %s\n", string);

}

{
char string[20];
puts("strcat 테스트");
printf("복사 전 : %s\n", string);
strcpy(string, "안녕!");
printf("복사 후 :%s\n", string);
strcat(string, "반가워!");
printf("연결 후 : %s\n", string);

}

{
puts("strcmp 테스트");
printf("apple:orange :%d\n", strcmp("apple", "orange"));
printf("orange:Orange :%d\n", strcmp("orange", "Orange"));
printf("pineapple:pinetree :%d\n", strncmp("pineapple", "pinetree",4));
//strncmp로 4글자까지만 비교하므로 둘 다 "pine"으로 동일한 문자열 (0반환)


}

{
puts("strlen 테스트");
printf("Hello : %d\n", strlen("Hello"));
printf("안녕하세요! : %d\n", strlen("안녕하세요!"));
}

{
char*string = "Heloo, Welcome to the C-World!";
printf ("strchr('o') : %s\n", strchr(string, 'o'));
printf ("strrchr('o') : %s\n", strrchr(string, 'o'));




}



}













댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random