#include <iostream>
int main()
{
//문자열 = 문자의 배열
//이걸 활용해서 메모리 복사라는 매우 유용한 기능을 쓸 수 있다.
//char: 1바이트를 차지하는 문자
//wchar_t: 2바이트를 차지하는 문자(유니코드)
//한글은 1글자당 2바이트를 차지하므로 char에 저장할때는
//2개의 공간이 필요하다.
//문자열의 끝은 0(널문자) 로 표현이 되어야 한다.
//지금 당장은 char에 집중할 것임(많이 쓸 것이므로)
char Text[64] = {};
//문자열도 마찬가지로 0으로 먼저 초기화를 해놓고 사용하는 것이 좋다.
char Text1[64] = "문자열입니다.";
//이 문장을 저장하기 위해선 한글(2) * 6 + .(1) * 1 + 널문자(문장의 끝, 1) 해서
//13바이트가 필요하다.
std::cout << Text << std::endl;
std::cout << Text1 << std::endl;
//strcpy_s : 문자열 복사 함수
//1번인자가 배열로 들어갈 경우 인자가 2개이다.
//1번 인자에 2번인자에 들어간 문자열을 복사해주게 된다,
//1번인자가 포인터일 경우 인자가 3개이다.
//1번인자에 3번인자의 문자열을 2번인자의 크기만큼 복사해주게 된다.
//
//예전에는 strcpy()를 사용했으나 안정성이 떨어지는 문제점이 있어 사용하지 않는다.
//strcpy는 예전버전의 함수이기 때문에 가급적
//strcpy_s를 사용해야 한다.
strcpy_s(Text, "TestCopy");//첫 번째 인자로 배열을 주었을 경우
std::cout << Text << std::endl;
char* pText = Text;
//strcpy_s(pText, 8, "다시 복사");
//이렇게 복사해야할 문자열의 길이보다 공간이 작으면 에러가 발생한다.
strcpy_s(pText, 10, "다시 복사");
std::cout << pText << std::endl;
std::cout << "문자열 리터럴" << std::endl;
//Q)이렇게 리터럴 문자열을 출력시킬 때도 분명이 메모리 공간이 필요할 것이다.
//그럼 이 문자열은 어디에 저장될까?
//A)ro(읽기 전용) Data라는 메모리의 영역에 저장된다
//문자열 리터럴은 const char*로 인식된다.
//리터럴 문자열도 메모리에 저장되어 있으므로 물론 메모리 주소를 받아올 수 있다.
const char* pText1 = "메모리 주소";
std::cout << pText1 << std::endl;
//strlen 함수를 이용해서 문자열의 수를 얻어올 수 있다.
std::cout << "Count : " << strlen(pText1) << std::endl;
//null문자를 제외한 실제 문자열 개수가 몇개인지를 얻어온다.
//strcat_s : 문자열을 붙여주는 함수이다.
strcat_s(Text, " 문자열 붙여보자.");
std::cout << "문자열 붙이기 : " << Text << std::endl;
//strcmp : 문자열 비교 함수이다.
//문자열이 같을 경우 0을 반환 한다.
//0이 아니면 다르다는 의미이다.
if (strcmp(Text, "다시 복사 문자열 붙여보자."))
std::cout << "두 문자열이 같다." << std::endl;
else
std::cout << "두 문자열이 다르다." << std::endl;
//오늘의 숙제
//strlen, strcpy_s, strcat_s, strcmp 직접 구현해 보자
//참고)문자열의 끝에는 0('\0')이 나온다.
//TIP)오버로딩 되어있는 함수일 경우 괄호 괄호 사이에서 위아래 화살표 키로 어떤 인자가 필요한지 확인할 수 있다.
strcpy_s()
return 0;
}
'C++기초' 카테고리의 다른 글
220328(1)_파일 입출력(1)_ 파일 쓰기 (0) | 2022.04.05 |
---|---|
220325(4)_memset, memcpy (0) | 2022.04.05 |
220325(2)_Define (0) | 2022.04.05 |
220325(1)_함수(4)_함수의 재귀(Recursion) (0) | 2022.04.05 |
221324(3)_함수(3)_함수 포인터 (0) | 2022.04.05 |
#include <iostream>
int main()
{
//문자열 = 문자의 배열
//이걸 활용해서 메모리 복사라는 매우 유용한 기능을 쓸 수 있다.
//char: 1바이트를 차지하는 문자
//wchar_t: 2바이트를 차지하는 문자(유니코드)
//한글은 1글자당 2바이트를 차지하므로 char에 저장할때는
//2개의 공간이 필요하다.
//문자열의 끝은 0(널문자) 로 표현이 되어야 한다.
//지금 당장은 char에 집중할 것임(많이 쓸 것이므로)
char Text[64] = {};
//문자열도 마찬가지로 0으로 먼저 초기화를 해놓고 사용하는 것이 좋다.
char Text1[64] = "문자열입니다.";
//이 문장을 저장하기 위해선 한글(2) * 6 + .(1) * 1 + 널문자(문장의 끝, 1) 해서
//13바이트가 필요하다.
std::cout << Text << std::endl;
std::cout << Text1 << std::endl;
//strcpy_s : 문자열 복사 함수
//1번인자가 배열로 들어갈 경우 인자가 2개이다.
//1번 인자에 2번인자에 들어간 문자열을 복사해주게 된다,
//1번인자가 포인터일 경우 인자가 3개이다.
//1번인자에 3번인자의 문자열을 2번인자의 크기만큼 복사해주게 된다.
//
//예전에는 strcpy()를 사용했으나 안정성이 떨어지는 문제점이 있어 사용하지 않는다.
//strcpy는 예전버전의 함수이기 때문에 가급적
//strcpy_s를 사용해야 한다.
strcpy_s(Text, "TestCopy");//첫 번째 인자로 배열을 주었을 경우
std::cout << Text << std::endl;
char* pText = Text;
//strcpy_s(pText, 8, "다시 복사");
//이렇게 복사해야할 문자열의 길이보다 공간이 작으면 에러가 발생한다.
strcpy_s(pText, 10, "다시 복사");
std::cout << pText << std::endl;
std::cout << "문자열 리터럴" << std::endl;
//Q)이렇게 리터럴 문자열을 출력시킬 때도 분명이 메모리 공간이 필요할 것이다.
//그럼 이 문자열은 어디에 저장될까?
//A)ro(읽기 전용) Data라는 메모리의 영역에 저장된다
//문자열 리터럴은 const char*로 인식된다.
//리터럴 문자열도 메모리에 저장되어 있으므로 물론 메모리 주소를 받아올 수 있다.
const char* pText1 = "메모리 주소";
std::cout << pText1 << std::endl;
//strlen 함수를 이용해서 문자열의 수를 얻어올 수 있다.
std::cout << "Count : " << strlen(pText1) << std::endl;
//null문자를 제외한 실제 문자열 개수가 몇개인지를 얻어온다.
//strcat_s : 문자열을 붙여주는 함수이다.
strcat_s(Text, " 문자열 붙여보자.");
std::cout << "문자열 붙이기 : " << Text << std::endl;
//strcmp : 문자열 비교 함수이다.
//문자열이 같을 경우 0을 반환 한다.
//0이 아니면 다르다는 의미이다.
if (strcmp(Text, "다시 복사 문자열 붙여보자."))
std::cout << "두 문자열이 같다." << std::endl;
else
std::cout << "두 문자열이 다르다." << std::endl;
//오늘의 숙제
//strlen, strcpy_s, strcat_s, strcmp 직접 구현해 보자
//참고)문자열의 끝에는 0('\0')이 나온다.
//TIP)오버로딩 되어있는 함수일 경우 괄호 괄호 사이에서 위아래 화살표 키로 어떤 인자가 필요한지 확인할 수 있다.
strcpy_s()
return 0;
}
'C++기초' 카테고리의 다른 글
220328(1)_파일 입출력(1)_ 파일 쓰기 (0) | 2022.04.05 |
---|---|
220325(4)_memset, memcpy (0) | 2022.04.05 |
220325(2)_Define (0) | 2022.04.05 |
220325(1)_함수(4)_함수의 재귀(Recursion) (0) | 2022.04.05 |
221324(3)_함수(3)_함수 포인터 (0) | 2022.04.05 |