Jiyong's STUDY

strcat, strncat 설명, 비교 본문

프로그래밍/C

strcat, strncat 설명, 비교

Kingjiyong 2018. 5. 15. 14:52

문자열을 덧붙이는 함수 strcat, strncat


#include <string.h>

char *strcat(char *dest, const char *src);


int main(){

char str1[20]="12345";

char str2[20]="67890";

strcat(str1, str2);

puts(str1);

}


결과 >> 1234567890


strcat은 첫번째 인자에 두번째 인자의 문자열을 덧붙이는 함수이다.

즉 12345 \0 뒤에 67890 \0을  덧붙여 12345 \0 67890 \0을 만들었다는 의미이다.

하지만 그렇다면 중간에 문자열의 끝을 알리는 널 문자가 있는데 

왜 끝까지 출력 되는지 의문일 수 있다.


그 이유는 첫번째 인자의 문자열의 마지막 공간부터 채워 넣기 때문이다.

즉, 널 문자를 지우고 두번째 인자의 문자열을 채워 넣는다는 의미이다.

그러므로 12345 \0 67890 \0이 아니라 1234567890 \0이 된다.


#include <string.h>

char *strncat(char *dest, const char *src, size_t n);


int main(){

char str1[20]="12345";

char str2[20]="1234567890"

strncat(str1, str2, 5);

puts(str1);

}


결과 >> 1234512345


strncat은 strcat과 다르게 세번째 인자로 덧붙여 받을 문자열의 길이를 받는다.

위 함수에서 보면 12345 \0 뒤에 str2에서 5글자만 받으니

str1은 1234512345가 된다.

또한 의문이 들 수 있는데 앞에서부터 5개의 인덱스를 가져와 널 문자가 없는데

결과는 1234512345로 제대로 나왔다.


여기서 알 수 있는 것은 strncat은 size_t n 만큼 길이를 받고 그 뒤에 널 문자를 자동적으로 추가한다.


즉, str1은 1234512345가 아니라 1234512345 \0이 되므로 정상적인 출력이 된다.

'프로그래밍 > C' 카테고리의 다른 글

문자열을 정수로 변환하는 함수들  (0) 2018.05.15
strcmp, strncmp 설명, 비교  (0) 2018.05.15
strcpy strncpy 설명, 비교  (0) 2018.05.14
scanf gets fgets 문자열 입력 비교  (0) 2018.03.19
비트시프트연산  (0) 2018.03.19