0

我正在尝试连接两个字符串,但我不能使用 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

4 回答 4

1

第三次调用中的地址应该是:

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

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

(只要是一个有效的索引,这p + i也是相同的。)&p[i]i

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

于 2011-08-02T18:49:20.977 回答
0

您正在向第二个 memcpy 提供最后一个数组元素的值。正确的方法是给出地址(使用&符号运算符(就像第二个语句中隐含的意思一样)。

memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const))
于 2011-08-02T18:48:58.907 回答
0

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

于 2011-08-02T18:50:19.997 回答
0

你的代码示例有点可怕,但是

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 是一个字符数组,应该可以工作。

于 2011-08-02T19:34:33.687 回答