http://www.yes24.com/Product/Goods/74269921
혼자 공부하는 C 언어 - YES24
혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학
www.yes24.com
앞서 제일 먼저 다뤘던 strcpy 함수를 직접 만들어 보겠습니다. strcpy 함수는 포인터를 써서 문자열을 복사합니다. strcpy 함수는 문자열이 저장된 메모리에서 첫 번째 문자의 주소를 인수로 받습니다. 이 주소로 어떻게 문자열 전부를 복사하는지 지금부터 살펴보겠습니다.
// strcpy와 기능이 같은 함수의 구현
#include <stdio.h>
char* my_strcpy(char* pd, char* ps); // 함수 선언
int main(void)
{
char str[80] = "strawberry";
printf("바꾸기 전 문자열 : %s\n", str);
my_strcpy(str, "apple"); // 문자열 "apple" 복사
printf("바꾼 후 문자열 : %s\n", str);
printf("다른 문자열 대입 : %s\n", my_strcpy(str, "kiwi")); // 반환값으로 출력
return 0;
}
char* my_strcpy(char* pd, char* ps) // 복사 받을 곳과 복사할 곳의 포인터
{
char* po = pd; // pd 값을 나중에 반환하기 위해 보관
while (*ps != '\0') // ps가 가리키는 문자가 널 문자가 아닌 동안
{
*pd = *ps; // ps가 가리키는 문자를 pd가 가리키는 위치에 대입
pd++; // 복사 받을 다음 위치로 포인터 증가
ps++; // 복사할 다음 문자의 위치로 포인터 증가
}
*pd = '\0'; // 복사가 모두 끝난 후 복사 받을 곳에 널 문자로 마무리
return po; // 복사가 끝난 저장 공간의 시작 주소 반환
}
strcat 함수와 같은 기능을 수행하는 함수를 만들면 다음과 같습니다.
char* my_strcat(char* pd, char* ps)
{
char* po = pd; // 배열의 처음 위치 보관
while (*pd != '\n') // pd를 널 문자 위치로 이동
{
pd++;
}
while (*ps != '\0') // 여기서 부터는 문자열 복사와 같음
{
*pd = *ps;
pd++;
ps++;
}
*pd = '\0';
return po; // 붙여넣은 배열의 시작 위치 반환
}
strlen 함수와 같은 기능을 수행하는 함수를 만들면 다음과 같습니다.
int my_strlen(char* ps) // ps 는 배열명을 저장하고 첫 번째 배열 요소를 가리킴
{
int cnt = 0; // 문자수를 세기 위한 변수
while (*ps != '\0') // ps가 가리키는 문자가 널 문자가 아닌 동안
{
cnt++; // 문자 수 증가
ps++; // 포인터를 다음 문자의 위치로 이동
}
return cnt;
}
strcmp 함수와 똑같이 작동하는 함수를 만들면 다음과 같습니다.
int my_strcmp(char* pa, char* pb)
{
while ((*pa == *pb) && (*pb != '\0')) // 두 문자가 같으나 널 문자가 아닌 경우
{
pa++; // 다음 문자로 이동
pb++; // 다음 문자로 이동
}
// 반복문 이후 이 시점에서는 두 문자가 다르거나 둘 다 널 문자임
if (*pa > *pb) return 1; // 앞 문자의 아스키 코드 값이 크면 1 반환
else if (*pa < *pb) return -1; // 뒷 문자의 아스키 코드 값이 크면 -1 반환
else return 0; // 둘 다 널 문자이므로 같은 문자열
}
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[혼자 공부하는 C언어] 블록 안에서 사용하는 지역 변수 (0) | 2022.12.10 |
---|---|
[혼자 공부하는 C언어] 지역 변수 (0) | 2022.12.10 |
[혼자 공부하는 C언어] 문자열을 비교하는 strcmp, strncmp 함수 (0) | 2022.12.10 |
[혼자 공부하는 C언어] 문자열 길이를 계산하는 strlen 함수 (0) | 2022.12.10 |
[혼자 공부하는 C 언어] 문자열을 붙이는 strcat, strncat 함수 (0) | 2022.12.10 |