Jiyong's STUDY
strcat, strncat 설명, 비교 본문
문자열을 덧붙이는 함수 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 |