Нулевой указатель с беззнаковым символом в c

Я строю unsigned char * в c и хочу знать, как я это закончу. Поэтому обычно в конце своих воспоминаний я ставлю '\0', но unsigned char распознает его как 0.

поэтому, когда я делаю что-то подобное:

void complement(unsigned char *c, int n){
  while(*c!='\0'){
    printf("%d\n", n-(*c));
    c++;
  }
}

он останавливается, когда я читаю «0» (и когда я читаю 0, я хочу напечатать n, дополнение)

Итак, что я могу использовать, чтобы иметь правильное конечное условие для моего while?


person Jackie    schedule 08.10.2016    source источник
comment
Просто добавьте 'printf(%d\n,n);' после блока while.   -  person Secto Kia    schedule 08.10.2016
comment
Я хочу прочитать все 0, а не только один, например, когда c = 00002552552555, когда я читаю свой 0, он преобразуется в 255.   -  person Jackie    schedule 08.10.2016
comment
Так это байтовые данные, а не символьные данные ASCII? Если это байтовые данные с допустимым диапазоном от 0 до 255, вам нужно будет указать длину. В данных не будет значения, которое укажет на конец.   -  person Rob K    schedule 03.02.2017


Ответы (1)


Возможно, вам разрешено переключаться с while на do-while вот так?

#include <stdio.h>

void complement(unsigned char *c, int n)
{
  do{
    printf("%d\n", n-(*c));
    printf("The character is %c\n", *c); // Just for debugging...
  }while(*(c++)!='\0');
}

int main(){
unsigned char *toPrint = (unsigned char *)"Print me!\0";
complement(toPrint, 0);
return 0;
}
person Nikolay Tsanov    schedule 08.10.2016
comment
У меня есть изображение .pgm, поэтому у меня есть некоторые значения для моих пикселей, я помещаю их в свой беззнаковый символ *, поэтому, когда я читаю 0, время останавливается, но я не хочу останавливаться, когда я читаю 0. - person Jackie; 08.10.2016
comment
Можете ли вы показать вызов дополнения и инициализацию c? - person Nikolay Tsanov; 08.10.2016