C 复制到从 malloc 创建的字符串

标签 c arrays string char

我有这个代码:

char *name = malloc(strlen(args[1]) + 6);
strncpy(name, args[1], strlen(args[1]));
printf("%d\n", strlen(name));

假设 args[1] 是“hello”,所以 strlen(args[1]) 是 5。 在 malloccing 11 个字节后,我将 5 个字节的“Hello”(意味着我想排除空终止字节)复制到名称中。

但是 strlen(name) 不是 5。我得到 8。它不应该是 5,因为那是你复制过来的吗?

最佳答案

此代码错误地使用了 strncpystrncpy 函数是 strcpy 的不安全版本,应避免使用;正确使用它需要编写不必要的复杂代码。

你可以这样写:

char *name = malloc(strlen(args[1]) + 6);
strcpy(name, args[1]);
printf("%zu\n", strlen(name);

关于C 复制到从 malloc 创建的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929477/

相关文章:

java - 创建一个变量,其名称存储在字符串变量中

c - 从 pci-/pcie-card 读取芯片 ID

c++ - 将值读入数组结构

javascript - 判断一个变量是否在数组中?

javascript - 用于将字符串拆分为数组并替换数组元素的正则表达式?

python - python中的str性能

c - flex 无法识别字符范围

C 何时分配和释放内存 - 在函数调用之前,函数调用之后......等

c++ - 如何注释#if、#else、#endif 预处理器构造?

php - 使用数组获取提交表单操作