我想在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);
}
答案 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);
我建议你在文件中重定向它并执行十六进制转储以查看输出。