получить доступ к указателю на символ в структуре C ++ и выделить память - PullRequest
0 голосов
/ 20 марта 2012

Я хочу получать байты в conbuf.buffer.любой из теста 1 или test2 в порядке.Я не вижу никакого значения в выражении printf.Я правильно передаю указатель?Как выделить память для указателя на символ в структуре.

typedef struct cBuf
{
    int size;
    char *buffer;
} cbuf;

class A
{
    cbuf conbuf;
    void test();
}

void A::test()
{
    int buffersize = 20;
    char buf[buffersize];

    conbuf.buffer = (char *)malloc(buffersize * sizeof(char *));

    // test 1
    int n = socket.receivebytes(conbuf.buffer, buffersize);

    // test 2
    //int n = socket.receivebytes(buf, buffersize);
    //strcpy(conbuf.buffer, buf);

    printf("conbuf.buffer %s \n", conbuf.buffer);
}

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Используйте это:

conbuf.buffer = (char *)calloc(  (buffersize * sizeof(char))+1,1); 

, поскольку printf требует, чтобы последний символ строки был завершен нулем, это гарантирует это.Но данные, полученные из сети, могут уже содержать NUL в середине.Поэтому вместо printf вы должны использовать fwrite:

fwrite(conbuf.buffer,buffersize , STDOUT);

Я бы посоветовал вам перенаправить его в файл и выполнить шестнадцатеричный дамп, чтобы увидеть вывод.

1 голос
/ 20 марта 2012

это

 conbuf.buffer = (char *)malloc(buffersize * sizeof(char *));

должно быть

  conbuf.buf = (char *)malloc(buffersize * sizeof(char)); //allocate space for char not pointer to char.  Your struct only has buf member not "buffer" 
...