我正在尝试使用memcpy添加两个字符串.第一个memcpy包含我需要的数据.然而,第二个没有增加.知道为什么吗?
if (strlen(g->db_cmd) < MAX_DB_CMDS )
{
memcpy(&g->db_cmd[strlen(g->db_cmd)],l->db.param_value.val,strlen(l->db.param_value.val));
memcpy(&g->db_cmd[strlen(g->db_cmd)],l->del_const,strlen(l->del_const));
g->cmd_ctr++;
}
Run Code Online (Sandbox Code Playgroud)
size_t len = strlen(l->db.param_value.val);
memcpy(g->db_cmd, l->db.param_value.val, len);
memcpy(g->db_cmd + len, l->del_const, strlen(l->del_cost)+1);
Run Code Online (Sandbox Code Playgroud)
这会让你获得以下:
strlen.每个必须遍历字符串,所以最小化这些调用是个好主意.memcpy需要实际附加,而不是替换.所以第一个参数必须与之前的调用不同.+1在第2个第3个arg中memcpy.这是NUL终结者.我也不确定你的if陈述是否有意义.也许更明智的做法是确保g->db_cmd有足够的空间来复制你的内容.您可以通过任何一个sizeof(如果db_cmd是一个字符数组)或跟踪堆分配的大小(如果db_cmd是通过获取malloc)来实现.所以也许最有意义的是:
size_t param_value_len = strlen(l->db.param_value.val),
del_const_len = strlen(l->del_const);
// Assumption is that db_cmd is a char array and hence sizeof(db_cmd) makes sense.
// If db_cmd is a heap allocation, replace the sizeof() with how many bytes you
// asked malloc for.
//
if (param_value_len + del_const_len < sizeof(g->db_cmd))
{
memcpy(g->db_cmd, l->db.param_value.val, param_value_len);
memcpy(g->db_cmd + param_value_len, l->del_const, del_const_len + 1);
}
else
{
// TODO: your buffer is not big enough. handle that.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7520 次 |
| 最近记录: |