代码之家  ›  专栏  ›  技术社区  ›  malajedala

通过使用函数指针与变量参数列表函数接口

  •  1
  • malajedala  · 技术社区  · 8 年前

    我正在尝试使用另一个程序的接口,其中我必须使用以下方法:

    void iterate_over_entries(Table* table, Func_ptr f, ... )
    

    因此,该函数被设计为在每个表条目上调用用户定义的函数f()。

    函数指针定义为:

    typedef size_t (*Func_ptr) (char* example, va_list args);
    

    这意味着我必须编写一个Func_ptr类型的函数来操作表的条目?

    例如,我想把长度小于给定长度的所有字符串设置为“a”。那么,我必须将长度放入这个va_list吗?

    size_t my_method(char* example, va_list args) {
    
         int length = va_arg(args, int);
    
         if (strlen(example) < length) strncpy(example, "a\0", 2);
    
         return 1;
    }
    

    因此,如果到目前为止我做的一切都正确,我只需要调用函数,但我不知道如何做。假设我希望命令行输入设置我允许的长度。。。

     int main(int argc, char** argv){ 
    
        Table* table; //this is set somehow.. 
    
        int length = atoi(argv[1]);
    
        size_t (*method)(char* example, va_list list);
        method = &my_method;
    
     }
    

    那么,我现在如何告诉程序使用my_method调用iterate_over_entries,其中输入的长度…:S

    1 回复  |  直到 8 年前
        1
  •  2
  •   Barmar    8 年前

    就叫它:

    int main(int argc, char** argv){ 
    
        Table* table; //this is set somehow.. 
    
        int length = atoi(argv[1]);
    
        Func_ptr method;
        method = &my_method;
        iterate_over_entries(table, method, length);
    
     }
    

    my_method 对于另一个变量,您可以直接传递它。

        iterate_over_entries(table, my_method, length);