访问struct C ++中的char指针并分配内存

时间:2012-03-20 17:33:10

标签: c++ pointers struct char malloc

我想在conbuf.buffer中接收字节。测试1或测试2都可以。我没有看到printf语句中的任何值。我正确地传递了指针吗?如何为结构内的char指针分配内存。

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 个答案:

答案 0 :(得分:1)

 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" 

答案 1 :(得分:1)

使用此:

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

因为printf要求字符串的最后一个字符串为空终止,这可以确保它。但是从网络收到的数据可能已经在中间包含NUL。因此,不应使用printf,而应使用fwrite:

fwrite(conbuf.buffer,buffersize , STDOUT);

我建议你在文件中重定向它并执行十六进制转储以查看输出。