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'));
}
}
댓글
댓글 쓰기