2010-02-18 2 views
17

나는 Pex으로 놀고 있는데, 내 방법으로 전달하는 매개 변수 중 하나는 "\0"입니다.C# - " 0"은 무엇을 의미합니까?

그 의미는 무엇입니까? 내 추측은 내 메서드의 내용을 기반으로 빈 문자열 ("")입니다. 그러나 동일하다면 "\0" 대신 ""을 사용하지 않는 이유는 무엇입니까?

누구나 알 수 있습니까?

+0

그것은 제로 뒤에 슬래시를 포함하는 문자열을 전달하고, 또는 널 문자를 포함하는 문자열을 통과? –

+0

이것은 코드가 말하는 것입니다 :'this.TestSaveString ("\ 0");' – Vaccano

+0

모든 위대한 답변 주셔서 감사합니다! 나는 Randolpho 's를 선택했는데, 그 이유는 무엇이 진행되고 있는지에 대한 가장 상세한 정보를 주었기 때문입니다. – Vaccano

답변

32

'\ 0'은 "null character"입니다. C와 C++의 일부에서 문자열을 종료하는 데 사용됩니다. Pex는 코드가 null 문자를 처리하는 방법을 확인하기 위해 테스트를 수행하여 Poison Null Byte 보안 취약성을 찾고 있습니다.

대부분의 C# 코드에는 두려움이 없습니다. 그러나 문자열을 비 관리 코드에 전달하면 문제가 발생할 수 있습니다.

편집 :

그냥 PEX는 널 문자가 포함 된 문자열을 전달한다 ... 명시한다. 이것은 이 아니며은 null 참조입니다.

+3

NULL 문자열은 빈 문자열과 동일하지 않습니다. 반면 MSDN 기사에서 "null 문자열은 System.String 개체의 인스턴스를 참조하지 않으며 null 문자열에서 메서드를 호출하면 NullReferenceException이 발생하지만 null 문자열을 연결하여 사용할 수 있습니다. 다른 문자열과의 비교 연산 다음 예제는 null 문자열에 대한 참조가 수행되고 예외가 throw되지 않는 경우를 보여줍니다. " – jfawcett

5

'\ 0'이 (가) 포함 된 문자열입니다. C#은 특별히 특별한 방법으로 이것을 처리하지 않습니다. 단지 유니 코드 문자 U + 0000입니다. 당신이 작성하는 경우 :

int firstCodePoint = text[0]; 

을 당신은 firstCodePoint은 0

3

그것은 널 문자와 문자열의 찾을 것입니다. C 또는 이전 C++ 라이브러리에 사용 된 것과 같은 오래된 문자열 라이브러리 — —은 '\ 0'문자를 사용하여 문자열의 끝을 나타냅니다.

.Net과 같은 새로운 환경에서는 다른 시스템을 사용하지만 '\ 0'이 (가)있는 문자열을 끝내는 데 많은 내역이 있으므로 오류의 공통점이 있습니다. Pex와 같은 테스트 라이브러리는 프로그램이 올바르게 처리하도록 라이브러리를 사용합니다.

+0

Eh ....이 -1에 자신을 가져올 수는 없지만 C# 문자열이 null로 종료되었다는 것을 암시하는 것처럼 보입니다. 그들은 그렇지 않습니다. – Randolpho

+0

@ 랜돌 포 (Randolpho) .Net과 같은 새로운 환경은 다른 시스템을 사용합니다. –

+0

예. 나는 그와 같은 것이 어떻게 암시되는지는 잘 모르겠습니다. –

2

문자 \ u0000 (일명 NUL)을 포함하는 길이가 1 인 문자열. 이 캐릭터는 특별히 다루어지지 않습니다.

문자열에서 \ 0을 사용하여 길이가 1 인 문자열을 할당합니다.이 경우 표준 문자열 함수는 길이가 0 인 것으로보고합니다. 문자열에는 \ 0뿐만 아니라 그것. 안전하게 str [0]을 수정하거나, 단일 문자를 strncat에 넣을 수 있습니다.