#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct rpc_return_data {
    int wait_response;
    int retu_data_len;
    char retu_data[0];
} rpc_retu_data_t;
int append_recv(char *rcv_buf, int rcv_len, rpc_retu_data_t **tota_rcv_buf, int *tota_len)
{
    int len;
    rpc_retu_data_t *new_buf;
    char *chs;
    char *p;
    if (rcv_buf == NULL)
    {
        return -1;
    }
    if (*tota_rcv_buf != NULL)
    {
        len = *tota_len + rcv_len;
        new_buf = (rpc_retu_data_t *) malloc(len + sizeof(rpc_retu_data_t) + 1);
        new_buf->wait_response = (*tota_rcv_buf)->wait_response;
        new_buf->retu_data_len = len;
        *tota_len = len;
        p = (char *)new_buf;
        p = p + sizeof(rpc_retu_data_t); //跨过rpc_retu_data_t头
        memcpy(p, (*tota_rcv_buf)->retu_data, (*tota_rcv_buf)->retu_data_len); //把数据拷贝到头的后面
        p = p + (*tota_rcv_buf)->retu_data_len;   //跨过头和旧数据
        memcpy(p, rcv_buf, rcv_len);
        chs = (char *)new_buf;
        chs[len + sizeof(rpc_retu_data_t)] = '\0';
        free(*tota_rcv_buf);   //释放旧数据
        *tota_rcv_buf = new_buf;
 } else {
        len = rcv_len;
        new_buf = (rpc_retu_data_t *) malloc(len + sizeof(rpc_retu_data_t) + 1);
        new_buf->wait_response = 1;  //这是处理读取的反馈数据,所以必然1;就是不是1,也不会错。
        new_buf->retu_data_len = len;
        *tota_len = len;
        p = (char *)new_buf;
        p = p + sizeof(rpc_retu_data_t); //跨过rpc_retu_data_t头
        memcpy(p, rcv_buf, rcv_len);
        chs = (char *)new_buf;
        chs[len + sizeof(rpc_retu_data_t)] = '\0';
        *tota_rcv_buf = new_buf;
    }
return len;
}
int main(int argc, char * argv[])
{
    char buf[256];
    int tota_len = 0;
    int len;
    rpc_retu_data_t *total_buf = NULL;
    memset(buf, 0, 256);
    while(scanf("%s", buf))
    {
        len = strlen(buf);
        append_recv(buf, len, &total_buf, &tota_len);
        memset(buf, 0, 256);
        printf("\ntotal_buf->retu_data_len=%d string=%s \n", total_buf->retu_data_len, total_buf->retu_data);
    }
}
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号