반응형
C에서 문자열 길이를 구할 때 strlen 함수를 많이 쓰죠?
사용법과 설명 보다는
이 함수를 사용할 때 주의할점을 알아볼까 합니다.
이와 같은 경우는 메모리 릭이 발생하죠?
코드는 극단적으로 보여져서 쉽게 알아볼 수 있지만
실제 코딩을 할 때 메모리 동적 할당 및 해제 후 해당 변수를 사용해서
메모리 릭이 발생할 수 있어요.
그래서 해당 함수를 사용할 때는 변수의 널 체크를 꼭 해주셔야 됩니다.
두번째 같은 경우는 c 처음하시는분들이 자주하는 실수일겁니다.
두 변수에 대하여 strlen 함수를 써서 길이를 알아보는 코드죠?
결과는 어떻게 나올까요??
아시는분들은 아시겠지만
p의 길이는 9
x의 길이는 0
결과가 나오죠?
이유는 간단합니다.
strlen 함수의 내부 구조가 0x00을 문자열의 끝으로 인식하기 때문에
위와 같은 결과가 나온겁니다.
예측할수 없는 문자열의 길이를 사용하게 될 경우
어떠한 데이터를 읽었는데 그 중간에 0x00의 데이터가 끼어있을 경우
이러한 경우에는 strlen으로 절대 멀쩡한 데이터 길이를 얻어올 수 없습니다.
예시로 보자면
test1함수 같은 경우 정상적으로 데이터를 복사 하지만
test2함수 같은 경우 길이가 0이기 때문에 데이터를 복사할 수가 없습니다.
그래서 이런 경우는
항상 데이터의 길이를 알 수 있도록 데이터와 데이터 길이 두가지를 항상 같이 넘겨줘야 합니다.
이상 strlen 함수를 사용할때 간단한 팁 또는 주의사항 이였습니다.
반응형
'프로그래밍 > C/C++' 카테고리의 다른 글
C/C++ 콘솔창 숨겨보자 feat GetConsoleWindow, ShowWindow (0) | 2017.03.07 |
---|---|
RegOpenKeyEx 사용 팁 서비스 사용 시 Error 2가 발생할 경우! (1) | 2017.03.02 |
[C] 숫자에서 문자열로 변환 (0) | 2015.05.07 |
[C] DLL 사용하기(dllimport,dllexport) (0) | 2014.02.20 |
[윈도우] CPU 이름 가져오기 (0) | 2014.02.05 |