我有一个动态分配的char数组,其中包含pre_padding_buffer(大小为8)和post_padding_buffer(大小为6)。我需要将字符串复制到这样的字符指针:
[ ][ ][ ][ ][ ][ ][ ][ ][e][x][a][m][p][l][e][ ][ ][ ][ ][ ][ ]
填充不是可选的,并且是我正在与之通信的机器的规格所要求的(它可以填充空/垃圾数据,无论如何都会被覆盖)。
目前这就是我正在做的事情。
unsigned char *async_string = get_async_string();
unsigned char *response_all_buf = (unsigned char*)malloc(LWS_SEND_BUFFER_PRE_PADDING + strlen(async_string) + LWS_SEND_BUFFER_POST_PADDING);
//Copy string
int i = 0;
for (i = 0; i < strlen(async_string); i++) {
response_all_buf[LWS_SEND_BUFFER_PRE_PADDING + i] = async_string[i];
}
libwebsocket_write(wsi,respones_all_buf,strlen(async_string),LWS_WRITE_TEXT);
free(response_all_buf); //<-- Segmentation fault here
分段错误必须表明我没有正确复制字符串。当你在前后插入填充符时,这样做的正确方法是什么?
答案 0 :(得分:1)
整洁的方法:
response_all_buf = malloc(8 + strlen(async_string) + 6);
memset(response_all_buf, ' ', (8 + strlen(async_string) + 6));
memcpy(response_all_buf + 8, async_string, strlen(async_string));
或者,正如你所说,填充可以包含垃圾:
你可以这样做:
response_all_buf = malloc(8 + strlen(async_string) + 6);
memcpy(response_all_buf + 8, async_string, strlen(async_string));
答案 1 :(得分:0)
所有的响应response_all_buf [LWS_SEND_BUFFER_PRE_PADDING + i] = async_string [i];