본문 바로가기
C++

week-1 [C++ 문자열 함수 정리]

by sseddi 2020. 4. 13.
728x90

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/

 

개발자 지망생

안녕하세요. BlockDMask 입니다.

blockdmask.tistory.com

https://m.blog.naver.com/PostView.nhn?blogId=tipsware&logNo=220982995703&proxyReferer=https:%2F%2Fwww.google.com%2F

 

strlen 함수에 대하여

: C 언어 관련 전체 목차 http://blog.naver.com/tipsware/2210108319691. strlen strlen은 'string lengt...

blog.naver.com

 http://lechocolat.egloos.com/343748

 

int대신 size_t를 쓰는 이유(펌)

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=69888713&qb=c2l6ZV90&enc=utf8§ion=kin&rank=1&search_sort=0&spq=1&pid=RKs7o35Y7uZssvj3d9Zsssssstl-

lechocolat.egloos.com

https://kgh940525.tistory.com/entry/CodingInterview-01-%EB%B0%B0%EC%97%B4%EA%B3%BC-%EB%AC%B8%EC%9E%90%EC%97%B4STL-stdString

 

[CodingInterview] 01 배열과 문자열(STL std::String)

이번에 살펴볼 주제는 코딩인터뷰 배열과 문자열파트에 C++ String에 대해 정리해보도록하겠습니다. 책은 자바위주로 되어있지만, 제가 알고리즘 테스트에 사용하는 언어는 C++14이기 때문에 Java의 StringBuilder..

kgh940525.tistory.com

 

728x90

댓글