c++ - 为什么 getxattr 会填充额外的元素?
问题描述
我有下面的一段代码,我无法弄清楚为什么我会在缓冲区的末尾得到一些奇怪的符号。
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 数组根本没有初始化,也没有完全覆盖,所以一些未初始化的字节仍然存在。
推荐阅读
- python-3.x - python行用一个元素划分
- node.js - 如何从另一条路线调用一个模型
- sql - 将具有两个不同日期的数据分组并取最新日期
- javascript - nodejs 按文件类型计算文件大小
- rust - 仅匹配有效的 UTF-8 字符
- javascript - 如何检查 discord.js 中是否存在消息
- javascript - Angular 8 - 在单词出现时动态插入带有回调调用的按钮
- exception - 使用 Apache Camel 处理 onException() 异常
- android - 如何从 Rest API 获取动态数据
- centos7 - 参考:jfrog artifactory could not validate router error