我有下面的代码,我无法弄清楚为什么我在缓冲区末尾收到一些奇怪的符号。
char value[100];
if(getxattr(filename, "user.permission", value, sizeof(value))!=-1){
//strncpy(val, value, strlen(value));
printf("value is %s\n", value);
}
Run Code Online (Sandbox Code Playgroud)
对于长度 > 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);
}
Run Code Online (Sandbox Code Playgroud)
看起来,您的值是一个字符串,但它不是以 null 结尾的,您必须自己执行此操作。因此,getxattr()不是附加随机字节,字符数组根本没有初始化,也没有完全覆盖,因此一些未初始化的字节仍然存在。