*strcpy
<string.h> 헤더 파일에 포함된 함수이며 함수의 형태는 strcpy(char a, char b)이며
b에 있는 문자열 전체를 a로 복사하는 함수이다.
int main(void) {
char a[] = "strcpy";
char b[10];
strcpy(b, a);
printf("%s", b);
return 0;
}
출력 결과
strcpy
*strncpy
<string.h> 헤더 파일에 포함되어 있는 함수이며 함수의 형태는 strncpy(char a, char b, size n)이며
b에 있는 문자열을 a로 복사하는데 n(size)만큼만 복사하는 함수이다.
int main(void) {
char a[] = "strcpy";
char b[10];
char c[] = "asdxv";
strncpy(b, c, 4);
printf("%s", b);
return 0;
}
출력 결과
asdx儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆asdxv
빈 배열에 문자 일부만 복사했는데도 사이에 쓰레기 값들이 담겨있다.
그 이유는 strcpy는 문자열의 끝을 알리는 \0까지 복사를 하기 때문이다.
고로 n의 크기는 sizeof(origin)보다 작거나 같아야한다.
4만큼만 복사하면 asdx이므로 빈 배열에서 asdx를 넣을 경우 \0을 발견하지 못하고 그 결과 중간에 쓰레기 값이 들어가게 되는 것이다.
또한 문자열 포인터에 할당된 문자열은 읽기 전용이다.
왜냐하면 C의 컴파일러는 문자열 포인터에 할당한 문자열을 실행 파일의 읽기 전용 데이터 섹션에 배치하기 때문에 실행 파일이 실행된 뒤에는 읽기 전용 메모리가 되며 쓰기를 할 수 없는 상태이기 때문이다.
결론
strcpy함수를 이용해서 문자열을 복사할땐 끝에 항상 \0이 들어갈 자리까지 배열의 크기를 설정해줘야한다.
"inho"를 복사하려면 최소 배열의 크기가 5가 되야한다.
*strcmp
문자열 비교 함수이다. strcmp(a, b) 의 형태로 사용하며 반환값이 0 일경우 a와 b는 같은 문자열이라는 뜻이다.
if (strcmp(temp->data, x) == 0) return temp;
위와 같은 경우 temp->data와 x가 0일 경우 즉, 두개의 문자열이 같을 경우 temp를 반환한다는 조건문이다.
'C' 카테고리의 다른 글
C - C언어 for Beginner 개정 4판 연습문제 풀이 (0) | 2022.06.27 |
---|---|
C - 자료구조 연결리스트 (0) | 2022.05.19 |
C - 자료구조 덱 (0) | 2022.05.18 |
C - 자료구조 큐 (0) | 2022.05.03 |
C - 자료구조 스택 (0) | 2022.04.07 |