首页 文章

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

提问于
浏览
-1

我想在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 回答

  • 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

    用这个:

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

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

    fwrite(conbuf.buffer,buffersize , STDOUT);
    

    我建议你将它重定向到一个文件中并进行十六进制转储以查看输出 .

相关问题