객체 프로그래밍 C++ (gets, puts, strncat, strncpy)
본문 바로가기
코딩공부/C++기초

객체 프로그래밍 C++ (gets, puts, strncat, strncpy)

by 지누이야기 2024. 3. 7.
반응형

저번 시간에는 스트링 라이브러리에 있는 함수들을 배웠고, 그 함수들의 예제를 공부해봤습니다.

 

이번 시간에는 더 다양한 함수들을 배워보겠습니다.

 

1. gets, puts

 

gets는 빈칸, tab을 포함한 새로운 문자열 입력 방식으로 엔터 전까지 모두 입력 받게 됩니다.  

 

cin과 다른 점은 띄어쓰기까지 받아낸다는 것입니다.

 

puts는 gets와 짝을 이루어 문자열을 출력하는 함수로 문자열 출력 후 자동으로 줄을 바꾸어줍니다.

 

그런데 이런 gets가 c++ 최신 버전에는 삭제가 되었습니다.

https://www.zinnunkebi.com/c-gets-fgets/

 

C언어 gets함수를 사용해서는 안되는 이유

gets함수는 읽어들이는 문자열의 길이를 지정하지 않기때문에 문자열을 저장하는 메모리 버퍼의 크기보다 더 많은 문자열을 읽는 경우 오류가 발생합니다.

www.zinnunkebi.com

그래서 gets가 안된다고 당황하지마시고 get_s나 fgets를 쓰면 됩니다.

 

그림 1

2. strncpy(원하는 개수의 문자만 복사)

 

이 함수는 strncpy(복사받을 배열명, "복사할 문자나 배열명", 복사할 문자수)이렇게 활용되게 됩니다. 

 

그런데 이것을 그냥 하게 되면 문제가 발생합니다.

 

그림 2

 

그림 2처럼 문제가 발생하는데 이 때는 #define _CRT_SECURE_NO_WARNINGS 이거를 써주시면 됩니다.

 

그림 3

 

문자열을 복사하다보니 minsu의 앞 4글자 n=mins까지 가져오게 됩니다. 그런데 출력이 될 때 mins가 아니라 minsoo is good이 출력이 됩니다.

 

이는 원래 문자열의 끝을 컴퓨터는 NULL로써 파악하게 되는데 그렇기 때문에 NULL이 나오는 good뒤에까지 쭉 출력을 하게 됩니다.

 

아니면 NULL을 추가해줘야 됩니다.

 

그림 3

 

이렇게 하면 mins만 출력 되는 것을 알 수 있습니다.

 

3. strncat (더하기 역할)

 

배열에 이미 있는 문자열 뒤에 지정한 문자만큼 이어붙이는 역할입니다.

 

활용을 할 때는 strncat(복사받을 배열명, "복사할 배열명", 복사받을 글자수)으로 활용을 하면 됩니다.

 

 

그림 4

 

strncat을 써서 mins를 복사한 값이 원래 Name에 들어간 것을 알 수 있습니다.

반응형

댓글