与Memcpy连接

时间:2011-08-02 18:43:31

标签: c memcpy memset

我试图连接两个字符串,我不能使用strcpy和strcat,所以我试图通过memcopy来做到这一点。然而,在第三个语句中,memcpy并没有增加第一个memcpy的延续。知道怎么做吗?

memset(&l->db.param_key.param_name, ' ', sizeof(l->db.param_key.param_name));
memcpy(l->db.param_key.param_name,g->program_id_DB,(strlen(g->program_id_DB)));
memcpy(l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const));

4 个答案:

答案 0 :(得分:1)

第三次调用中的地址应为:

l->db.param_key.param_name + strlen(g->program_id_DB) + 1

请注意,对于T * p,表达式p[i];*(p + i)相同。你不想取消引用,你想要地址,所以你只需添加到指针。

(只要p + i是有效索引,&p[i]i完全相同。)

还要注意@没有人观察到您的第一行不正确,您应该说l->db.param_key.param_name(或等效&l->db.param_key.param_name[0])。

答案 1 :(得分:0)

你给了第二个memcpy最后一个数组元素的valye。 正确的方法是给出地址(使用&符号运算符(就像在第二个语句中暗含的那样)。

memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const))

答案 2 :(得分:0)

使用与memcpy()完全相同的strcpy(),除非您必须使用字符串大小而不是字符串长度。

答案 3 :(得分:0)

你的codeexample有点可怕,但是

memset(l->db.param_key.param_name,0,sizeof(l->db.param_key.param_name));
memcpy(l->db.param_key.param_name,g->program_id_DB,strlen(g->program_id_DB));
memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)],l->userId_const,sizeof(l->userId_const));

应该有效,如果 l-> db.param_key.param_name和l-> userId_const是char数组。