본문 바로가기

C언어 기초

[CPP] strcpy_s - L buffer is too small

자주 하는 실수라 스크랩 해놓자.

 

strcpy_s는 c언어에서 문자열을 복사하는 기능을 한다.

strcpy_s(옮길 변수, 공간의 크기, 붙여넣을 문자열) 로 사용되는데

 

여기서 공간에 크기에 sizeof(포인터)가 들어가면서 문제가 생김

(나는 문자열 공간의 크기를 넣어주었다고 착각)

 

포인터의 byte 크기 != 문자열 공간의 byte크기이다.

 

예시)

=> sizeof(포인터가 가르키는 공간)=20byte

=> sizeof(포인터)= 4byte

 

 

이 상황에서 sizeof(str)은 20바이트가 아닌 4byte가 됨


문제 해결방법1. 직접 상수를 넣기


문제 해결방법2. strlen을 이용해 길이값 변수 넣기

 

 

참고)

https://stackoverflow.com/questions/46994332/strcpy-s-buffer-l-buffer-is-too-small-0

 

strcpy_s buffer L buffer is too small && 0

i have a problem. i tried to proceede the following steps: char * str; char * s="Hello"; int len = std::strlen(s); str=new char[len +10]; strcpy_s(str,sizeof(str) ,s); Bu...

stackoverflow.com