【发布时间】:2013-04-18 03:34:53
【问题描述】:
我正在努力将可执行程序转换为可以从主例程中调用的函数。按照目前的编写,可执行文件如下所示:
int main(int argc, char* argv[]){
//do stuff
if(setxattr(argv[4], tmpstr, argv[3], strlen(argv[3]), 0)){
perror("setxattr error");
exit(EXIT_FAILURE);
}
//do more stuff
}
我可以按如下方式调用它并且它可以成功运行:
./set_attributes -s 加密 1 ~/text.txt
但是现在我想把它移到另一个程序中嵌入的函数中。失败的部分是strlen(argv[3])。我的新函数如下所示:
int set_encr_attr(char* fpath, int value) {
char* userstr = NULL;
/* Check that the value to set is either 0 or 1 */
if (!( (value == 0) || (value == 1) )) {
return -1;
}
//do stuff (including malloc(userstr)
strcpy(userstr, XATTR_USER_PREFIX);
/* Set attribute */
if(setxattr(fpath, userstr, value, 1, 0)){
perror("setxattr error");
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}
如您所见,我已将第四个参数替换为数字 1,因为我已经检查过传入的值是 0 还是 1,因此它的 strlen 必须为 1。我已经尝试了一些其他的东西,但我总是得到这个错误:
xattr_new.c:在函数“set_encr_attr”中:
xattr_new.c:52:2:警告: 传递“setxattr”的参数 3 使指针从整数不带 cast [默认启用]
/usr/include/i386-linux-gnu/sys/xattr.h:40:12: 注意:预期的‘const void *' 但参数的类型是“int”
当我玩这个时,我可以看到 strlen(argv[3]) == 1,所以我不明白为什么我不能用整数 1 替换它。至于打字问题,我已经尝试过强制转换(我认为这通常是个坏主意),但我无法成功。
有人可以帮忙吗?谢谢!
【问题讨论】:
标签: c attributes typing