2016-05-12 3 views
2

Как мы можем проверить конец массива unsigned char? С строкой гольцом это легко, я могу просто сделать тест, какКак проверить конец массива unsigned char?

while (str[i] != '\0') 

или просто

while (str[i]) 

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

BYTE* a = getB(); 
int i=0; 
while(a[i]!=0) 
{ 
    printf("%C", a[i]); 
    i++; 
} 

Благодарности

+2

[Этот код кажется прекрасным] (http://melpon.org/wandbox/permlink/xoN2so1dCSsRfbM0). Что значит «не работает»? Пожалуйста, напишите [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). – MikeCAT

+3

Вы не можете. Период. –

+2

Почему бы не выбрать * один из * C или C++? – MikeCAT

ответ

8

Это полностью зависит от вас.

То есть, вы определите, что означает конец массива.

Обычно, конечно, конец массива символов является «нулевым байтом», обозначающим конечную позицию. Нет причин, по которым вы не можете сделать это с помощью массива unsigned char.

Но, как и с char, это необязательно имеет место. Возможно, вы обозначаете конец массива, подсчитывая его элементы (указав размер) или объявляя, что какой-то другой символ является окончательным.

Мы не можем сказать вам, что это такое. Это может сделать только человек, который создает данные (насколько это касается нас, это вы).

Таким образом, либо обратитесь к документации для библиотеки, которая предоставила вам массив, либо попала в вашу память. :)

+2

Только что добрался до моей памяти и получил segfault. Я знал, что должен был инициализировать этот указатель в Альбукерке. – user4581301

+0

https://en.wikipedia.org/wiki/Sentinel_value –

1

@eugenesh это право. Вы не можете этого сделать. Либо вам нужно иметь дополнительное пространство в конце и добавить какой-то разделитель, либо сохранить счетчик символов.

Смежные вопросы