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号错误添加的, ...

13得票3回答
堆分配创建了一个未初始化的值。

我一直在追踪这个bug,但就是搞不明白。难道我忘记了一些基本的C语言知识吗?==28357== Conditional jump or move depends on uninitialised value(s) ==28357== at 0x4C261E8: strlen (mc_re...

11得票6回答
utf8 aware strncpy

我很难相信我是第一个遇到这个问题的人,但我搜索了很长时间,没有找到解决方案。 我想使用 strncpy,但它必须是 UTF8 意识的,以便不会将 utf8 代码点部分写入目标字符串。 否则,即使您知道源字符串是有效的 UTF8(当源字符串大于最大长度时),您也无法确定结果字符串是否有效。 ...

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

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

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

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

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

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

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

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

7得票7回答
strncpy和使用sizeof复制最大字符数

我正在使用以下代码。 char call[64] = {'\0'} /* clean buffer */ strncpy(call, info.called, sizeof(call)); 我经常使用sizeof作为目标大小来保护溢出,以防源大于目标。这样我可以防止缓冲区溢出,因为它只会...

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

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

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

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