C # - Что означает "\ 0"? - PullRequest
       11

C # - Что означает "\ 0"?

20 голосов
/ 19 февраля 2010

Я играю с Pex , и один из параметров, которые он передает моему методу, - "\0".

Что это значит? Я предполагаю, что пустая строка ("") основана на содержании моего метода. Однако, если это то же самое, то почему бы просто не использовать "" вместо "\0"?

Кто-нибудь знает, что это такое?

Ответы [ 5 ]

37 голосов
/ 19 февраля 2010

'\ 0' является " нулевым символом ". Он используется для завершения строк в C и некоторых частях C ++. Пекс делает тест, чтобы увидеть, как ваш код обрабатывает нулевой символ, вероятно, ищет Poison Null Byte эксплойт безопасности.

Большинству кода C # нечего бояться; однако если вы передадите свою строку в неуправляемый код, у вас могут возникнуть проблемы.

Edit:

Просто чтобы быть явным ... Пекс передает строку, содержащую нулевой символ. Это , а не пустая ссылка.

5 голосов
/ 19 февраля 2010

Это строка, содержащая символ '\ 0'. C # не рассматривает это каким-то особым образом - это просто символ Unicode U + 0000. Если вы напишите:

int firstCodePoint = text[0];

тогда вы найдете firstCodePoint = 0.

3 голосов
/ 19 февраля 2010

Это строка с нулевым символом. Старые библиотеки строк & mdash; как это используется в C или более старых библиотеках C ++ & mdash; использовал символ '\ 0' для обозначения конца строки.

В более новых средах, таких как .Net, используется другая система, но существует много истории окончания строки с '\ 0', так что это общая ошибка. Тестирующие библиотеки, такие как Pex, будут использовать его, чтобы убедиться, что ваша программа обрабатывает его правильно.

2 голосов
/ 01 августа 2013
Escape Sequence  
\0    
Character Name 
Null    
Unicode Encoding     
0x0000

Смотрите эту ссылку.

2 голосов
/ 19 февраля 2010

Строка длиной 1, содержащая символ \ N0000.Этот символ не обрабатывается специально.

В C, который использует \ 0 для завершения строки, вы также выделяете строку длины 1. В этом случае стандартные строковые функции сообщат длину 0, так как строкасодержит \ 0, а также завершается с ним.Вы можете смело изменять str [0] или помещать в него один символ.

...