我试图连接两个字符串,我不能使用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));
答案 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数组。