C печать пустого * буфера - PullRequest
0 голосов
/ 20 октября 2011

kay, так что это

void printPacketBuffer(void *buffer, unsigned int length)
{
    unsigned int i=0;
    char *c;
    unsigned int limit = ( (length != 0)?length:PACKET_DATA );
    for (i=0; i<limit; i++) {
        c = (char *)(buffer+i);
        if ( *c != '\0' ) {
            printf("%c", *c);
        }
    }
}

работает, но следующая функция, коротко пропускающая последние 14 байтов, не может понять почему ?!

void printPacket (void * buffer) {
    unsigned int size = getPacket_size(buffer);
    printf("\n***********\nNew Packet holding %d bytes of data\n***********\n", size);
    char *c;
    int counter=0;
    int i;
    for (i=2; i<size+2; i++) {
        c = (char *)(buffer+i);
        if ( *c != '\0' ) {
            printf("%c", *c);
            counter++;
        }
    }
    printf("\nactual printing %d, i=%d\n", counter, i);
}

а вот и звонки

printPacketBuffer(pbuffer+2, getPacket_size(pbuffer));
printPacket(pbuffer);

1 Ответ

0 голосов
/ 20 октября 2011

я предположил, что pbuffer + 2 - это следующий адрес на два байта, но я ошибался, вот что происходит если bpuffer = 0x7fff2c03d8a0, bpuffer + 2 = 0x7fff2c03d8b0 Теперь, чтобы перейти к следующему расположению в 2 байта, я использовал

void *temp = (char *)pbuffer+shift;

В любом случае, мораль этой истории - работать с байтами, приведенными к беззнаковому символу

void printPacket (void * buffer) {
    unsigned int size = getPacket_size(buffer);
    printf("\n***********\nNew Packet holding %d bytes of data %p\n***********\n", size, buffer);
    char *c;
    int counter=0;
    int i;
    for (i=2; i<size+2; i++) {
        c = (char *)buffer+i;
        if ( *c != '\0' ) {
            printf("%c", *c);
            counter++;
        }
        else {
            printf("NULL ");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...