如何在字符串末尾添加空字符?

时间:2011-08-04 20:26:57

标签: c++ c

我从

开始
memcpy(g->db_cmd,l->db.param_value.val,l->db.param_value.len);

其中包含值“function”但是我希望附加一个空字符,如“function'\ 0'”我试过了

memcpy(&g->db_cmd[l->db.param_value.len],0,1);

这会导致程序崩溃。我也尝试了memset

 memset(&g->db_cmd[l->db.param_value.len],0,1);

这不起作用。有什么想法吗?

6 个答案:

答案 0 :(得分:4)

g->db_cmd[l->db.param_value.len] = 0;

假设您已为此分配空间。

答案 1 :(得分:4)

首先,C(和C ++)不像Java,C#,PHP和其他人那样知道动态。当您在C中看到一个字符串时,该字符串的长度几乎是静态的。

为了使答案更简单,让我们重新定义您的变量:

  • g->db_cmd将被称为dest
  • l->db.param_value.val将被称为src
  • l->db.param_value.len将被称为len

您应该分配一个大小为len的新字符串加一(对于额外的空值)。

分配新的dest

dest = calloc(sizeof(char), len + 1);
只要len加1,

calloc就会分配一个字符数组。在calloc()分配了数组之后,它用空值(或\ 0)填充它,因此你自动将dest字符串附加一个空值。

接下来,使用strncpysrc复制到dest

 strncpy(dest, src, len);

要将其转换回您的变量名称:

g->db_cmd = calloc(sizeof(char), l->db.param_value.len + 1);
strncpy(g->db_cmd, l->db.param_value.val, l->db.param_value.len);

答案 2 :(得分:3)

如果您想要字符串复制语义,为什么不使用a string-copying function

答案 3 :(得分:0)

默认情况下,字符串以空值终止 如果你想在结尾添加一个额外的NULL,你可以写“String \ 0”
db_cmd[len]='\0'

答案 4 :(得分:0)

如果您要复制的源也包含NULL终止字符串,请使用

memcpy( g->db_cmd, l->db.param_value.val, l->db.param_value.len + 1 );

否则你必须自己添加终结器。

g->db_cmd[l->db.param_value.len] = '\0';

当然,您需要确保目的地有足够的空间容纳此角色。

答案 5 :(得分:0)

memcpy有两个指针和一个整数。在你说的崩溃行中,你传递一个指针和两个整数。代码不能取消引用第二个参数(0) 如果你真的想要使用memcpy,你必须有一个指向零

的指针
char zero = 0;
memcpy(&g->db_cmd[l->db.param_value.len], &zero , 1);

但我真的建议使用pyroscope的答案。它更快,更清晰。