问题描述
我制作了 inotifyFunc
来监控两条路径。除了最后一行[我从主函数中获取的代码],也就是monitor.wd[0]
,没有任何东西给我一个错误。错误是
警告:传递‘inotifyFunc’的参数 3 使指针来自 没有强制转换的整数
不知道是什么问题?虽然上面的行 monitor.wd[0] = *pathname1;
没有给我一个错误。
void inotifyFunc(char *path,uint32_t *maskPtr,int *wd[2]){
monitor.fd = inotify_init();
if(fcntl(monitor.fd,F_SETFL,O_NONBLOCK)){
perror("inotify not initialized: ");
exit(0);
}
*wd[0] = inotify_add_watch(monitor.fd,path,*maskPtr);
*wd[1] = inotify_add_watch(monitor.fd,*maskPtr);
if(*wd[0] < 0 || *wd[1] < 0){
perror("Sorry");
exit(1);
}
}
monitor.mask[0] = ENOENT;
monitor.mask[1] = IN_CREATE;
printf("Choose the source path: ");
scanf("%s",pathname1);
monitor.wd[0] = *pathname1;
inotifyFunc(pathname1,&monitor.mask[0],monitor.wd[0]);
解决方法
从这里扫描
scanf("%s",pathname1);
似乎 pathname1
是指向 char
的指针。如果是这样的话,那就去做吧
monitor.wd[0] = *pathname1;
monitor.wd[0]
必须是 char
。因此,当您将其传递给函数时,您应该收到一个简单的 char
而不是指向 int
的指针数组:int *wd[2]
void inotifyFunc(char *path,uint32_t *maskPtr,char wd)
如果您提供更多背景信息,也许我们可以了解您想要做的事情。
,monitor.wd[0] = *pathname1;
这行没有意义。我不知道你想做什么,但不管是什么,这条线绝对是错误的。 inotifyFunc
仅使用 monitor.wd
进行输出,因此在调用 monitor.wd
之前将 inotifyFunc
设置为某个值是没有意义的。此外 monitor.wd[0]
是一个指向整数的指针(尽管您可能想要一个整数),并且为它分配一个字符是没有意义的。你为什么要取文件路径的第一个字符?所以删除这一行。
鉴于您遇到的错误,monitor.wd
似乎是一个整数数组:
struct {
…
int wd[2];
} monitor;
(但我不应该猜测!当你提出问题时总是发布完整的代码。)如果是这样,你在 inotifyFunc
中声明和使用它是错误的:{ wd
中的 {1}} 是指向整数的指针数组,而不是整数数组。假设 inotifyFunc
实际上是上面声明的整数数组,通过删除虚假指针取消引用来更改 monitor.wd
以正确使用它:
inotifyFunc
如果你真的想在 void inotifyFunc(char *path,int wd[2]){
monitor.fd = inotify_init();
if(fcntl(monitor.fd,F_SETFL,O_NONBLOCK)){
perror("inotify not initialized: ");
exit(0);
}
wd[0] = inotify_add_watch(monitor.fd,path,*maskPtr);
wd[1] = inotify_add_watch(monitor.fd,*maskPtr);
if(wd[0] < 0 || wd[1] < 0){
perror("Sorry");
exit(1);
}
}
中有一个指向整数的指针数组,那么修复 inotifyFunc
的声明并确保在调用它之前指针指向分配的内存。