C++ strcpy 와 strcpy_s 질문 드립니다

C++ strcpy 와 strcpy_s 질문 드립니다

작성일 2022.12.06댓글 1건
    게시물 수정 , 삭제는 로그인 필요

c++ 언어 초보입니다.
윤성우 열혈 c++ 책을 보며 독학중입니다.

예제
#include <iostream>
#include <cstring>
using namespace std;

namespace CAR_CONST
{
enum
{
ID_LEN=20, MAX_SPD=200, FUEL_STEP=2, ACC_STEP=10, BRK_STEP=10
};
}

class car
{
private:
char gamerID[CAR_CONST::ID_LEN];
int fuelgauge;
int curspeed;
public:
void initmembers(const char* ID, int fuel);
void showcarstate();
void Accel();
void Break();
};

void car::initmembers(const char* ID, int fuel)
{
strcpy(gamerID, ID);
fuelgauge = fuel;
curspeed = 0;
}
void car::showcarstate()
{
cout << "소유자ID: " << gamerID << endl;
cout << "연료량: " << fuelgauge << "%" << endl;
cout << "현재속도: " << curspeed << "km/s" << endl << endl;
}
void car::Accel()
{
if (fuelgauge <= 0)
return;
else
fuelgauge -= CAR_CONST::FUEL_STEP;

if ((curspeed + CAR_CONST::ACC_STEP) >= CAR_CONST::MAX_SPD)
{
curspeed = CAR_CONST::MAX_SPD;
return;
}
curspeed += CAR_CONST::ACC_STEP;
}
void car::Break()
{
if (curspeed < CAR_CONST::BRK_STEP)
{
curspeed = 0;
return;
}
curspeed -= CAR_CONST::BRK_STEP;
}

int main(void)
{
car run99;
run99.initmembers("run99", 100);
run99.Accel();
run99.Accel();
run99.Accel();
run99.showcarstate();
run99.Break();
run99.showcarstate();
return 0;
}

여기서 책에는 strcpy 라고 써있는데 오류가 떠서
찾아보니 strcpy_s 를 사용하여 실행하니 정상적으로 결과값이 나오게 됩니다.
strcpy 와 strcpy_s 차이가 정확히 무엇인가요?


#c++ strcpy #c++ strcpy_s #c++ strcpy 오류 #c++ strcpy_s 사용법 #c++ strcpy 사용법 #c++ strcpy strcpy_s #c++ strcpy 구현 #c++ strcpy_s 헤더 #c++ strcpy string #c++ strcpy header

profile_image 익명 작성일 -

strcpy_s는 저장소의 크기를 추가로 입력받습니다.

버퍼 오버런을 방지하기 위함이죠.

char a[5];

strcpy(a, "12345678");

이렇게 하면 a의 공간을 초과해버립니다.

이걸 버퍼 오버런이라 부릅니다.

strcpy_s(a, 5, "12345678");

이렇게 하면 1234<NUL>까지만 복사가 됩니다.

이때 크기를 허위로 입력할 수 있습니다.

strcpy_s(a, 10, "12345678");

이렇게하면 디버깅때 에러가 검출됩니다.

디버깅을 하지 않으면 버퍼 오버런이 발생합니다.

c++ 질문 입니다. strcpy, strcpy_s...

... 뜨는데 strcpy(name2, name); c:\비주얼 c++ 2008\0410\자습\02.cpp(18) : warning... return 0; } strcpy 와 strcpy_s 의 차이는 보안(SECURE)입니다. strcpy는...

strcpy, strcpy_s 오류 (visual studio...

c++ 공부하던 중 너무 간단한 프로그래밍이지만 너무 답답한 상황이 생겨 질문 드립니다. 1. 첫... 말고 strcpy_s 를 사용하라는 것을 보았습니다. 굳이...

C strcpy 와 strncpy 질문이요!

... strcpy 와 = 의 차이가 궁금합니다! 구체적으로 설명 부탁드립니다! 1. puts는 꼭 0이 있어야지만... printf("%s\n", arr); arr[0] = '8'; printf("%s\n", name); 다음...

char * 와 strcpy 에 관한 질문입니다.

... 허접질문하나 드립니다. char *ptr; ptr = new char[size]; strcpy (ptr, "aaa"); delete [] ptr; 위의... strcpy(t.ptr, "aaa"); printf("t.ptr [%s]\n", t.ptr); func(&t); return...

c++프로그래밍 질문드립니다.(기초)

아래 코드는 윤성우의 c++프로그래밍에 나오는... 궁금해서 질문드립니다. 좋은 답변 감사합니다.... void Printer::SetStreing(char* s){ strcpy(str,s); } void...

C++ 깊은 복사 질문 드립니다.

... show(); } 생성자 Book(char* title, int price)... strcpy_s(this->title, len, title); this->price = price; } int main() { Book cpp("명품C++", 10000)...

간단히 c++ 에서 strcpy를 이용해...

... 리터럴, strcpy 의 메모리 측면에 대해 설명부탁드립니다. 포인터 변수는... 단 그 사이즈가 short(2바이트 정수), int(대체로 4바이트 정수), long(4바이트 정수)...