본문 바로가기

프로그래밍/[C#]

[C#] String에서 empty와 null의 차이

winform 예제로 계산기를 만들던 도중 -5+3 같은 계산식을 계산할때

런타임 오류가 발생했습니다.

 

"-5"의 경우 split을 통해 문자열을 나누면 "\0"과 "5" 로 나누어 질줄 알고

아래처럼 예외처리를 하니 에러가 해결 되지 않았습니다.

 

 

 

 

디버깅을 해보니  

""과 "5"로 나눠 졌습니다

 

null하고 뭐가 다르지 싶어서 minusSplit[1]="\0"을 넣어보니 다음과 같이 값차이가 났습니다.

 

 

 

 

""과 "\0"의 차이에 대해서 찾아보니

 

"null is used to refer to nothing while empty is used to refer to a unique string with zero length."

 

""은 길이가 0인 문자열

"\0"은 nothing 이라 하였습니다.

nothing이 뭔지 애매한데 heap영역의 어떤 영역도 가리키지 않는(할당되지 않은) 상태라고 할 수 있습니다.

 

보통 널문자는 동적할당을 하기전 초기화 할때 사용하며 C++에서 문자열의 끝에 항상  "\0"이 들어갑니다.

위 두가지 경우에서 "\0"의 의미가 같다고 보긴 어렵습니다.

널 자체의 의미를 살린것은 전자고 후자의 경우 문자열의 끝을 알리기 위해 사용했다고 보면 되겠습니다.

더불어 C++에서의 문자열과 C#에서의 문자열은 매우 다르므로 다음 기회에 포스팅을 해보도록 하겠습니다.

 

따라서 if(minusSplit[0] == "") 로 나타내도 되지만

아래와 같은 함수를 사용하는것이 더 바람직합니다.