我写这段代码,但我收到错误。如何在函数参数中实现函数?
我想这样做:
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 [])); ^
答案 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);