1. strcpy : 문자열을 복사하는 함수
str = string
cpy = copy
+) strcpy 함수 사용시 Error C4996 이 발생했는데, 이는 프로젝트 -> C/C++->전처리기->전처리기 정의-> 편집-> _CRT_SECURE_NO_WARNINGS 입력 후 확인 의 방법으로 해결할 수 있었다.
빈 배열과 꽉 찬 배열에 문자열 복사 한 결과 결과 값이 똑같이 origin 값으로 출력되었다.
그 이유는 strcpy함수는 문자열 복사시 문자열 끝에 있는 \0값(NULL)도 함께 복사되기 때문이다.
origin 값이 복사된 후(nothing\0) 그 남은 자리에 원래 배열에 있던 값이(ng\0) nothing\0ng\0 이렇게 표현된다.
문자열은 그 끝을 \0으로 확인 한다. 따라서 nothing 까지만 나타나는 것이다.
2. strncpy : 문자열을 복사하는 함수 / 문자열의 일부만도 복사할 수 있음. (n 지정한만큼)
str(string)
cpy(copy)
n(number) : 복사할 만큼 지정 가능
strncpy 함수는 strcpy 함수와 달리 \0을 상관하지 않고 지정한 n의 길이만큼만 복사한다.
그래서 case3을 보면 3길이만큼 잘 복사된 것을 볼 수 있다.
그런데 case2와 4이 조금 이상한 것을 볼 수 있다. 이는 \0때문에 발생한 것이다.
case2에서 (13째 코드에서) sizeof(origin) 을 사용하게 되면 \0까지 복사되게 된다. (n을 지정하지 않고 전체를 복사해서)
\0까지 복사되어서 nothing\0a\0이 되어 nothinga가 아니라 nothing이 복사된 것이다.
이때는 sizeof(origin) 자리에 sizeof(origin)-1을 작성하면 해결된다.
case4는 n값을 입력해서 3자리만 출력이 되었지만 \0값을 찾지 못해 쓰레기 값도 같이 출력이 된 것이다.
이때는 \0을 적절한 위치에 적어주면 된다.
case4 printf문 전줄에 num4[3] = '\0'; 을 적어주면 \0값을 인식해 쓰레기값이 출력되지 않는다.
+) strncpy로 복사했을 경우 n의 길이 주의 !
n의 크기는 복사하려고 하는 것(origin+\0)보다 작거나 같아야 함
또한 복사하려는 곳(num)보다 작거나 같아야 함
3. strlen(string length) : 문자열을 받아서 길이를 반환하는 함수
-> \0이 나올때까지 문자 개수를 세서 최종 길이 반환
-> 그래서 문자열 중간에 \0 값을 넣어버리면 거기까지만 길이 반환
+) 4. size_t : sizeof()가 반환하는 타입으로 해당 시스템에서 어떤 값이 차지할 수 있는 최대 크기를 표현하는 자료형.
string 사이즈 반환 함수
num1의 문자열 길이는 nothing으로 7로 나오지만 중간에 \0을 넣어준 num2는 anything이 \0문자 앞부분인 any 까지만 인식되서 3으로 나온 것을 확인할 수 있다.
5. strcat : 문자열 이어붙이는 연결 함수
공간이 20으로 넉넉한 num2에 num1의 문자열을 이어 붙임 그래서 I am sleepy 문장 완성
6. strncat : 문자열 이어붙이는 연결 함수 / 문자열의 일부만도 이어붙일 수 있음. (n 지정한만큼)
I am sleepy를 작성하고 싶어 num1 앞부분인 sleepy만 쓰려고 strncat 사용
띄어쓰기를 해놔서 " sleepy" ->n=7
예제를 다 printf 함수로 진행했는데 cout를 활용해서 출력을 했어야 하나라는 생각이 들었다.....
참고) https://blockdmask.tistory.com/
http://lechocolat.egloos.com/343748
댓글