109得票11回答
为什么应该使用strncpy而不是strcpy?

编辑:我已经添加了示例的来源。 我发现了这个示例:char source[MAX] = "123456789"; char source1[MAX] = "123456789"; char destination[MAX] = "abcdefg"; char destination1[MAX...

98得票11回答
为什么strncpy不会在末尾添加空字符?

strncpy()据说可以防止缓冲区溢出。但如果它在不添加空字符的情况下防止了溢出,很可能随后的字符串操作也会溢出。因此,为了防止这种情况,我发现自己要做:strncpy( dest, src, LEN ); dest[LEN - 1] = '\0'; man strncpy 给出了如下信息...

87得票8回答
为什么strlcpy和strlcat被认为是不安全的?

我理解strlcpy和strlcat是为了替代不安全的strncpy和strncat而设计的。然而,一些人仍然认为它们存在安全问题,并只是引起了不同类型的问题。 有人能举个例子来说明使用strlcpy或strlcat(即总是在字符串末尾添加空字符的函数)如何会导致安全问题吗? Ulrich...

74得票5回答
为什么strncpy不安全?

我想了解为什么strncpy被认为是不安全的。有人能提供相关文档或者使用它的漏洞示例吗?

45得票9回答
gcc-8 -Wstringop-truncation的最佳实践是什么?

GCC 8新增了一个-Wstringop-truncation警告。来自https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944: -Wstringop-truncation警告是在GCC 8.0通过r254630为81117号错误添加的, ...

25得票6回答
在我的情况下,应该使用strncpy还是strlcpy?

我想要将src_str复制到dst_arr,应该使用什么方法?为什么?char dst_arr[10]; char *src_str = "hello"; 注意:我知道strlcpy并非所有地方都可用,这不是问题所在。 PS:读了很多关于strncpy和strlcpy好坏的东西后,我的头比电脑...

24得票6回答
strncpy和memcpy有什么区别?

如何访问s中的s[7]? 我没有观察到strncpy和memcpy之间的任何区别。如果我想打印输出s,以及s[7](例如qwertyA),我需要在以下代码中进行哪些更改:#include <stdio.h> #include <stdlib.h> int main()...

23得票3回答
将填充了零的字节转换为UTF-8字符串

我正在解包几个包含C语言中's'类型字段的结构体。这些字段包含由C代码中的strncpy处理的零填充UTF-8字符串(请注意此函数的遗留行为)。如果我解码这些字节,我会得到一个带有大量末尾NUL字符的Unicode字符串。 >>> b'hiya\0\0\0'.decode(...

23得票4回答
'strncpy'和'sprintf'的区别

我在我的应用程序中看到很多使用 sprintf 的地方来复制字符串。 我有一个字符数组:char myarray[10]; const char *str = "mystring"; 现在,如果我想将字符串str复制到myarray中,最好使用:sprintf(myarray, "%s", ...

15得票6回答
什么是strncpy()的最佳替代品?

strncpy()函数并不总是以空字符结尾,因此我想知道什么是始终以空字符结尾的最佳替代方法?我需要一个函数,如果: strlen(src) >= n /*n is the number of characters to be copied from source*/ 不需要再添加...