티스토리 뷰

안녕하세요.

요즘 업무때문에 언어를 여러가지 섞어서 보고 있는데

한 함수 때문에 경고가 떠서 경고가 200개가 넘게 뜨더라고요;;

(인수인계자님?)

 

에러는 아니지만 너무 신경쓰여서 고쳐볼까합니다. 

 

에러 내용

sprintf is deprecated

 

원인

- C 언어쪽에서 사용하는 명령어 같은데 이게 이제 없어졌다고 합니다. 

Xcode 에서 싫어하는중

 

해결법

- snprintf로 바꿔주시면 됩니다.  

- 예를들면 아래 같이 사용하셨다면 

sprintf(a,"%s is good",b);

- 간단한 경우에는 이렇게 두가지로 바꿀 수 있습니다.

snprintf(a,sizeof(a),"%s is good",b);
혹은 
snprintf(a,strlen(a),"%s is good",b);

 

* 근데 이렇게 바꾸실때 만약 a 의 크기가 너무 작으면 데이터 오버플로우가 발생하더라고요...

그럼 사이즈를 좀더 안전하게 할수있는 방법은 없을까요?

 

*중요*

그래서 난 더 안전하게 하고 싶다 하시는 분들은 미리 크기를 구하시는걸 권장 드립니다. 

참고로 snprintf 의 리턴값이 바로 저희가 원하는 크기이니까 이 점을 이용해 구해줍시다. 

예를들면 

int size = snprintf(NULL,0,"%s is good",b) + 1;
// 뒤의 1의 경우 저는 넉넉히 두고싶어서 설정한 겁니다.
snprintf(a,size,"%s is good",b);

 

후 이거 하나 고쳤는데 경고가 절반이 사라졌네요

 

아무래도 Obj-C랑 C 랑 섞어서 사용하시다보니 

이런 일이 일어난 것 같네요.

 

중요한건 아니지만 

신경쓰이는 분들을 위해 올려봅니다. 

 

오늘도 파이팅입니다.

 

 

댓글