본문 바로가기

프로그래밍/ANSI C, C++

C/C++ 함수 사용시 주의 사항





1.

함수명 : strcpy(dest, src)

  : string.h

 

 

 src가 가르키는 문자열을 dest가 가르키는 배열에 복사한다. src에서 복사될때 '\0' 까지 복사됨으로 문자열이 겹쳐지지는 않는다. 이때 dest src를 모두 복사 받을 수 있을 정도로 충분히 커야 한다.

 

주의사항

 strcpy()목적지의 배열의 크기가 충분히 크지 않을 경우 어떤 일이 발생될지 알 수가 없다. 운이 좋으면 세그먼트폴트 에러와 함께 죽겠지만, 그렇지 않고 알 수 없는 작동을 할 수도 있다. 이는 흔히 말하는 버퍼오버플로우 크래커 기술에 매우 취약하다.

strcpy()를 쓰기 전에는 반드시 복사할 문자열의 크기를 검사해주어야 한다. 또는 strncpy()를 써야 한다. strncpy()는 문자열의 길이가 지정개수보다 크면 NULL로 끝나지 않기 때문에 반드시 마지막 배열에 NULL을 넣어야한다.

strncpy(dest, src, 5);

dest[5] = 0;

 

 

2. 

함수명 : fopen(filename, mode)

  : stdio.h

 

 

 Open a file. These functions are deprecated because more secure versions are available; see fopen_s, _wfopen_s.

 

주의사항

 fopen을 실패할 경우, 파일스트림(fp)를 사용하면 프로그램이 죽는다. 항상 에러처리를 해주자.

 

 

3. 

함수명 : fclose(fp)

  : stdio.h

 

 

 Closes a stream (fclose).

 

주의사항

 열리지 않은 파일스트림(fp)을 닫을 경우, 프로그램이 죽는다. 함수 사용 시 파일스트림이 열려있는지 체크가 필요하다.

 

관련 함수 : fputc, fputs, fgetc, fgets etc..

관련함수 또한 체크 필요.

 

 

4. 

함수명 : sprintf(buf, "%d", arg...)

  : stdio.h

 

 

 Write formatted data to a string.

 

주의사항

 buf의 사이즈보다 큰 데이터가 들어갈 경우, 프로그램이 죽는다. 버퍼 사이즈만큼만 저장하도록 처리하는 방식을 취해야한다.

가능하다면 sprintf_s, CString을 사용한다.