size_t像snprintf这样的函数混淆了

Ale*_*ura 1 c printf sizeof size-t

在函数中snprintf,如何strlcat,以及strlcpy他们的manpage size_t size在所述函数的参数中提到的内容,究竟是size什么,或者最好的方法是什么size

取自strlcpy(3),strcat(3)printf(3)(添加评论)

size_t
strlcpy(char *dst, const char *src, size_t size);
//                                         ^^^^

char *
strncat(char *str, const char *src, size_t n);
//                                         ^

int
snprintf(char *str, size_t size, const char *format, ...);
//                         ^^^^  
Run Code Online (Sandbox Code Playgroud)

我的理解是,size可以(或者,如果strncat,应该?)获得如下:

sizeof dst - strlen(dst) - 1 
// sizeof dst buffer, minus the offset of '\0', minus 1 for the null-terminator
Run Code Online (Sandbox Code Playgroud)

但是我记得在某个地方阅读,以获得size一个变量,你做了类似的事情:

sizeof <VAR> / <SOMETHING ELSE?>
// sorry, I don't remember the rest of this method
Run Code Online (Sandbox Code Playgroud)

两种形式之间是否存在差异,它们是等同的和/或可互换的,还是仅在某些情况下有效?

编辑:我想我现在明白了一点. sizeof返回传递给它的任何内容的大小(以字节为单位),但在相同情况下,除了源缓冲区的大小,还需要考虑目标缓冲区的大小,如同的情况一样strncat.

gna*_*729 5

对于strlcpy,您可以为其指定缓冲区的大小.如果缓冲区的大小为100,则strlcpy最多可以复制99个字符加零字节.

对于strlcat,您可以为其指定缓冲区的大小.strlcat计算出已经有多少字节.

strlcpy,strlcat,snprintf的全部意义在于,它给出了缓冲区的大小,函数计算出其余部分,而不是计算可用的字节数.那是因为计算大小的人会犯错误,所以调用strlcpy并计算自己可用的字节数就会失败.