gpt4 book ai didi

c - strncpy 并不总是空终止

转载 作者:太空狗 更新时间:2023-10-29 15:11:56 24 4
gpt4 key购买 nike

我正在使用下面的代码:

char filename[ 255 ];
strncpy( filename, getenv( "HOME" ), 235 );
strncat( filename, "/.config/stationlist.xml", 255 );

获取此消息:

(warning) Dangerous usage of strncat - 3rd parameter is the maximum number of characters to append.
(error) Dangerous usage of 'filename' (strncpy doesn't always null-terminate it).

最佳答案

我通常避免使用 str*cpy()str*cat()。您必须应对边界条件、神秘的 API 定义和意外的性能后果。

您可以改用 snprintf()。您只需要考虑目标缓冲区的大小。而且,它更安全,因为它不会溢出,并且始终为您终止 NUL。

char filename[255];
const char *home = getenv("HOME");
if (home == 0) home = ".";
int r = snprintf(filename, sizeof(filename), "%s%s", home, "/.config/stationlist.xml");
if (r >= sizeof(filename)) {
/* need a bigger filename buffer... */
} else if (r < 0) {
/* handle error... */
}

关于c - strncpy 并不总是空终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com