我有这个代码:
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,因为那是你复制过来的吗?
最佳答案
此代码错误地使用了 strncpy
。 strncpy
函数是 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/