strcat, strncat 문자열 합치기
- 프로그래밍/C/C++
- 2018. 7. 1.
strcat strncat 문자열 합치기
이번에는 문자열 합치기에 대해서 알아보겠다.
strcat strncat 함수가 있는데 이 함수를 사용하기 위해서는 string.h 헤더 파일을 include 해줘야 한다.
사용법은 이러하다.
1 2 3 4 5 6 7 8 9 | #include <stdio.h> #include <string.h> main() { char array1[10] = "Good"; char array2[10] = "Look"; strcat_s(array1, sizeof(array1), array2); puts(array1); } | cs |
< 출력 >
GoodLock
먼저 함수를 사용하기 위해 string.h 파일을 include 해주고
각 배열에 데이트를 넣어줬다. 그리고 strcat(받을 문자열, 대상 문자열의 버퍼 크기, 붙일 문자열)을 이용해서
데이터를 합쳐줬다. 그럼 strncat 사용법을 알아보자.
1 2 3 4 5 6 7 8 9 | #include <stdio.h> #include <string.h> main() { char array1[10] = "Good"; char array2[10] = "Look"; strncat_s(array1, sizeof(array1), array2, 3); puts(array1); } | cs |
< 출력 >
GoodLoo
사용법은 strcat와 거의 같다고 볼 수 있다. 마지막에 데이터 합칠 개수만 입력해주면 된다.
그럼 이런 함수가 어떻게 동작을 하는지 함수의 원형을 한번 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> char* strcat_my(char *dest, size_t n, char *src) { if (n < sizeof(src)) return 0; while (*dest) dest++; while (*src) { *dest = *src; dest++; src++; } *dest = '\0'; return dest; } main() { char array1[10] = "Good"; char array2[10] = "Look"; strcat_my(array1, sizeof(array1), array2); puts(array1); } | cs |
반환형은 char*이다. 그리고 인자 값 2번째를 보면 size_t n을 받아들이고 있다.
만약 n이 복사할 데이터의 변숫값보다 크면 0을 리턴하기로 했다.
왜냐?? 10 바이트만큼 데이터가 있는데 그것보다 크면 데이터가 안 들어가니까!
그리고 while(*dest)로 문자열의 끝부분(NULL) 부분을 찾아주고
while(*src)로 src가 NULL 부분을 찾을 때까지 반복문을 돌려주는데
dest는 지금 문자열의 끝(NULL) 부분을 가리키고 있다. 그래서 끝부분에 *src 값을 넣어준다.
그리고 dest++, src++을 해준다.
그리고 마지막에 dest 끝부분에 '\0'을 넣어준다. 그리고 dest를 넘겨준다.
그럼 strncat 구현된 것을 보자. (나의 못난 실력으로 만들었다. 더 나은 소스가 있다면 댓글에 달아주세요)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> char* strcat_my(char *dest, size_t n, char *src, size_t maxlen) { if (n < sizeof(src)) return 0; n = 0; while (*dest) dest++; while (*src) { *dest = *src; dest++, src++, n++; if (n == maxlen) break; } *dest = '\0'; return dest; } main() { char array1[10] = "Good"; char array2[10] = "Look"; strcat_my(array1, sizeof(array1), array2, 3); puts(array1); } | cs |
strcat_s 코드와 거의 비슷하다. 추가된 내용은 인자 값 4번째에 maxlen을 추가한 것이고
n 변수를 재활용해서 n이 maxlen 값이랑 같다면 반복문을 끝낸다.
이런 게 추가가 됐다.