如何将字符串复制到字符指针的中间

时间:2013-11-22 11:05:06

标签: c string pointers strcpy

我有一个动态分配的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

分段错误必须表明我没有正确复制字符串。当你在前后插入填充符时,这样做的正确方法是什么?

2 个答案:

答案 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];

  • 当您处理字符串或字符时,不建议这样做。正如0XF1所建议的那样,您可以按照可以很好地控制response_all_buf的方法进行操作。