函数在C中的函数参数中

时间:2014-10-29 16:21:33

标签: c

我写这段代码,但我收到错误。如何在函数参数中实现函数?

我想这样做:

A function that manipulates input file according to its function pointer parameter.
The function should print the manipulated file content to the console. You have to
implement following function pointers;
a. void uppercase(char content[]); //converts all letters to
uppercase
b. void lowercase(char content[]); // converts all letters
to lowercase
c. void capitalize(char content[]); //capitalizes each word
d. void toggle(char content[]); // converts lowercase
letters to uppercase and uppercase letters to lowercase

我的代码:

#include <stdio.h>

void text_file_manipulator( char str_filename[],int (*pf_convertion)( char content[]);


int main(void)
{

    int hour, minute, d_hour, d_minute, d_size, inc;
    double a, b, c, search_starting_point,step_size;

    puts("-------------------------------");
    printf("text_file_manipulator:\n");
    text_file_manipulator("in.txt", pf_convertion("uppercase"));
    text_file_manipulator("in.txt", pf_convertion("lowercase"));
    text_file_manipulator("in.txt", pf_convertion("capitalize"));
    text_file_manipulator("in.txt", pf_convertion("toggle"));
    puts("-------------------------------");
}
void text_file_manipulator( char str_filename[],int (*pf_convertion)( char content[])){

}

int pf_convertion( char content[]){

}

编译时出现错误消息:

1.c: In function ‘main’:
1.c:14:2: error: passing argument 2 of ‘text_file_manipulator’ makes pointer from integer without a cast
  text_file_manipulator("in.txt", pf_convertion("uppercase"));
  ^
1.c:3:6: note: expected ‘int (*)(char *)’ but argument is of type ‘int’
 void text_file_manipulator( char str_filename[],int (*pf_convertion)( char content[]));
      ^

1.c:15:2: error: passing argument 2 of ‘text_file_manipulator’ makes pointer from integer without a cast
  text_file_manipulator("in.txt", pf_convertion("lowercase"));
  ^
1.c:3:6: note: expected ‘int (*)(char *)’ but argument is of type ‘int’
 void text_file_manipulator( char str_filename[],int (*pf_convertion)( char content[]));
      ^

1.c:16:2: error: passing argument 2 of ‘text_file_manipulator’ makes pointer from integer without a cast
  text_file_manipulator("in.txt", pf_convertion("capitalize"));
  ^
1.c:3:6: note: expected ‘int (*)(char *)’ but argument is of type ‘int’
 void text_file_manipulator( char str_filename[],int (*pf_convertion)( char content[]));
      ^

1.c:17:2:错误:传递'text_file_manipulator'的参数2使得整数指针没有强制转换   text_file_manipulator(“in.txt”,pf_convertion(“toggle”));   ^ 1.c:3:6:注意:预期'int(*)(char *)'但参数类型为'int'  void text_file_manipulator(char str_filename [],int(* pf_convertion)(char content []));       ^

1 个答案:

答案 0 :(得分:1)

除了一些其他编译错误之外,这里的主要语义错误是没有意义的:

text_file_manipulator("in.txt", pf_convertion("uppercase"));

您正在使用参数“uppercase”调用pf_convertion,它将返回一个int。然后,你试图将这个int传递给text_file_manipulator的第二个参数,它应该是一个函数。

你想做的可能只是

text_file_manipulator("in.txt", pf_convertion);

编辑:

所以你需要用正确的签名来实现你提到的函数(大写等),然后执行这样的调用:

text_file_manipulator("in.txt", uppercase);
text_file_manipulator("in.txt", lowercase);
text_file_manipulator("in.txt", capitalize);
text_file_manipulator("in.txt", toggle);