如何在没有转换错误的情况下从整数中删除指针?

问题描述

我制作了 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 的声明并确保在调用它之前指针指向分配的内存。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...