달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Basic Languages'에 해당되는 글 15

  1. 2017.08.25 strlen과 sizeof 간단 정리
2017. 8. 25. 03:58

strlen과 sizeof 간단 정리 Basic Languages/C, C++2017. 8. 25. 03:58

프로그래밍 지식은 대부분 그렇지만, 문자열은 특히 정확히 알아야 한다.

문자열에 대한 지식이 체화되지 않고, 그냥저냥 쓴다면 낭패를 보는 경우가 생긴다.

특히 여러 가지 지식들이 연동되어 쓰는 경우에 에러를 잘 잡지 못하게 된다.


예를 들면 다음과 같은 것들이 연동되어 있다고 하자.

1. 문자열

2. 시리얼 통신

3. 와이파이

4. lcd입출력

5. 임베디드 기기

6. 써보지 않은 외부 라이브러리


좀 더 구체적인 예를 들어보자.

아두이노에서 ESP8266 WiFi모듈을 통해 공공데이터API에 접속하여 받아온 정보를 SW시리얼에서 디버깅을 하며 값을 확인하는 동시에, I2C를 통해 CLCD로 출력하는 상황이라면,

각각의 지식이 불완전한 상태에서 문자가 깨진다든지, 중간에 값이 누락된다면 대체 어디를 해결해야 하는지 모르는 경우가 생기는 것이다.


하나하나 떼어 놓고 보면 쉽지만,

다양한 곳에서 만들어진 시스템과 라이브러리를 연동하게 되면 각각을 완벽하게 이해하고 있지 않은 경우 예상치 못한 오류가 났을 때 해결하는 것이 참 힘들다.


-------------------------------------------------------------------------


아무튼 프로그래밍 지식의 정확성에 대한 이야기는 잠시 접어 두고,

원래 보기로 했던 strlen과 sizeof를 보자.


strlen은 문자열의 길이를 반환하는 함수다.

말 그대로 문자열의 길이를 반환한다.

캐릭터가 1바이트인 경우는 글자수가 그대로 바이트수가 된다.(이건 컴파일러가 결정한다)

char one[]= "abc"

char two[32] = "abc"

strlen을 찍어 보면?

strlen(one)은 4(바이트)가 찍히고,

strlen(two)는 3(바이트)가 찍힌다.

얼핏 보면 같은 문자열로 보이는데, 이렇게 된 이유는 배열의 크기를 지정하지 않고 할당을 하면 문자열의 맨 뒤에 종료문자인 '\0'가 삽입되기 때문이다.

이런 이유로 문자열의 크기를 정할 땐 맨 뒤에 '\0'을 넣을 공간을 고려해서 정해야 한다.


sizeof도 보자.

이건 크기를 반환하는 함수다.

자료형의 크기를 알수도 있고,

변수의 크기도 알 수 있고,

배열의 크기도 알 수 있다.(자료형 * 배열 인덱스 수)

즉, 인자로 자료형을 넣을 수도 있고, 변수명을 넣을 수도 있고, 배열명을 넣을 수도 있다는 얘기다.

:
Posted by 클레잇