gpt4 book ai didi

c++ - 为什么 getxattr 会填充额外的元素?

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:42 28 4
gpt4 key购买 nike

我在下面的代码中无法弄清楚为什么在缓冲区末尾会出现一些奇怪的符号。

char value[100];
if(getxattr(filename, "user.permission", value, sizeof(value))!=-1){
//strncpy(val, value, strlen(value));
printf("value is %s\n", value);
}

对于长度 >4 个元素,它会正确打印,但如果该值少于四个元素,它会在末尾附加一些随机字符。

当我打印值的大小时,对于 1-4 之间的任何值长度,它显示 6。请有人解释为什么会出现这种行为。

最佳答案

您必须遵守属性的真实大小。

调用 getxattr() 返回值的大小。所以以下是正确的:

ssize_t sz = getxattr(filename, "user.permission", value, sizeof(value)-1);
if (sz != -1) {
value[sz] = '\0';
printf("value is %s\n", value);
}

看起来,你的值是一个字符串,但它不是空终止的,你必须自己做。所以,getxattr() 没有附加随机字节,char 数组只是没有初始化,也没有完全覆盖,所以一些未初始化的字节保留在那里。

关于c++ - 为什么 getxattr 会填充额外的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558912/

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