- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我想将src_str
复制到dst_arr
时应该使用什么,为什么?
char dst_arr[10];
char *src_str = "hello";
PS:在阅读了很多关于好或坏的文章后,我的脑袋转得比我的电脑磁盘还快strncpy
和 strlcpy
。
注意:我知道 strlcpy
并非随处可用。这不是这里的问题。
最佳答案
strncpy
绝不 当您的目标字符串以零结尾时是正确的答案。 strncpy
是一个旨在与非终止固定宽度 字符串一起使用的函数。更准确地说,它的目的是将一个以零结尾的字符串转换为一个无结尾的固定宽度字符串(通过复制)。换句话说,strncpy
在这里没有有意义的应用。
您在这里的真正选择是在 strlcpy
和普通 strcpy
之间。
当您想执行“安全”(即可能被截断)复制到 dst_arr
时,要使用的正确函数是 strlcpy
。
至于dst_ptr
...没有“复制到dst_ptr
”之类的东西。您可以复制到 dst_ptr
指向的内存,但首先您必须确保它指向某处并分配该内存。有许多不同的方法可以做到这一点。
例如,你可以让 dst_ptr
指向 dst_arr
,在这种情况下,答案与前面的情况相同 - strlcpy
.
或者您可以使用malloc
分配内存。如果保证分配的内存量足以容纳字符串(即至少分配了 strlen(src_str) + 1
字节),那么您可以使用普通的 strcpy
甚至 memcpy
来复制字符串。在这种情况下,没有必要也没有理由使用 strlcpy
,尽管有些人可能更喜欢使用它,因为它在某种程度上给了他们额外的安全感。
如果您有意分配较少的内存(即您希望您的字符串被截断),那么 strlcpy
将成为使用的正确函数。
关于c - 在我的例子中是 strncpy 或 strlcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987217/
我是 C 编程和 Makefile 的新手。 我的 c 代码中有一个函数,它使用 strlcpy 来复制字符串。 我不允许在我的代码中使用 #include 所以我已经包含了 #include 。 但
我知道,在从源字符数组复制到目标字符数组(我们希望目标以 null 结尾)时,strlcpy 比 strncpy 更安全,下面的包装可以吗? size_t strlcpy(char *dst, con
我知道 strcpy 在处理缓冲区时不安全,但是在我的代码中我有这个 static char buf[HUGE_BUFFER_SIZE + 1]; char servername[200]; i
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
海湾合作委员会 4.4.4 c89 我的程序做了很多字符串处理。我不想使用 strncpy,因为它不会终止。而且我不能使用 strlcpy,因为它不可移植。 几个问题。我怎样才能让我的功能适应它的步伐
strlcpy 中的“l”代表什么?我敢肯定,在询问之后这将是非常明显的,但我似乎无法在任何地方挖掘出可靠的答案。 最佳答案 strlcpy 由 Todd C. Miller 和 Theo de Ra
当我想将src_str 复制到dst_arr 时应该使用什么,为什么? char dst_arr[10]; char *src_str = "hello"; PS:在阅读了很多关于好或坏的文章后,我的
我一直在构建一些基本的 C 函数,但我仍然没有太多经验。 编码时 strlcpy 功能我不断收到 段错误(核心转储)错误。认为它可能与 NUL 终止字符串有关,但我在运行时不断收到错误消息。 任何帮助
我正在尝试编译最初为 FreeBSD 编写的源代码从 strlcpy isn't included in the linux GlibC ,我现在停在这个阶段。 GCC 建议我可以使用 strncpy
我知道 strlcpy 和 strlcat 被设计为 strncpy 和 strncat 的安全替代品。然而,有些人仍然认为他们是insecure, and simply cause a differ
我最近一直在努力学习 C,以便更好地理解(相对)低级编程,因为我通常使用 Python、PHP、Swift、Java、Javascript 等来完成我的大部分工作。我想我明白了指针的概念以及如何分配/
有人告诉我要使用 strlcpy 函数而不是这样的 strcpy #include #include void main() { char var1[6] = "stuff"; cha
虽然 Rust 提供了 str.as_bytes,但我希望将一个字符串复制到一个固定大小的缓冲区中,其中只有完整的 unicode-scalar-values 被复制到缓冲区中,而不是被截断一个写在最
我没有 OS X 开发环境。我没有 OS X 头文件。我不得不猜测我的一些图书馆电话。此时,我想使用的东西之一是 strlcpy()。 strlcpy() 是 OS X 上 libc 的一部分吗? 如
我不明白为什么我们必须为 strlcat 和 strlcpy 返回一个 unsigned int,为什么我们需要那个?这不是该功能的目标。 感谢您的回复 最佳答案 这些函数的目的是(以某种方式)移动字
我正在尝试在 Swift 3.0 中使用 strlcpy,但不断收到错误消息“无法将类型‘UnsafeMutablePointer’的值转换为预期的参数类型‘UnsafeMutablePointer!
我是一名优秀的程序员,十分优秀!