char * read_command()
{
char command[25];
char *input = malloc(sizeof(char) * 25);
printf("myRolodex Command: ");
scanf("%c", &command);
strcpy(input, command);
return input;
}
void evaluate_command(char command[250])
{
if (strcmp(command == 'I')==0)
{
printf("\nenterned i");
}
}
int main()
{
evaluate_command(read_command))
return 0;
}
我已经尝试过这样做,但我在编译时得到了:
rolodex.c: In function ‘read_command’:
rolodex.c:25: warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘char (*)[25]’
rolodex.c: In function ‘evaluate_command’:
rolodex.c:32: warning: comparison between pointer and integer
rolodex.c:32: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
/usr/include/string.h:143: note: expected ‘const char *’ but argument is of type ‘int’
rolodex.c:32: error: too few arguments to function ‘strcmp’
rolodex.c: In function ‘main’:
rolodex.c:43: warning: passing argument 1 of ‘evaluate_command’ from incompatible pointer type
rolodex.c:30: note: expected ‘char *’ but argument is of type ‘char * (*)()’
rolodex.c:43: error: expected ‘;’ before ‘)’ token
rolodex.c:43: error: expected statement before ‘)’ token
我应该让“read_command可以打印一个提示,然后从用户那里读取一个字符。它可能希望在返回之前确保该命令是一个有效的命令。
evaluate_command可以接受命令字符并确定它是哪个命令,然后执行相应的操作。“
答案 0 :(得分:1)
编译器错误的解释。您的代码还有其他问题,但
char * read_command()
{
char command[25];
char *input = malloc(sizeof(char) * 25);
printf("myRolodex Command: ");
scanf("%c", &command);
rolodex.c:25:警告:格式'%c'需要输入'char ',但参数2的类型为'char()[25]'
所以这就是说第二个参数是错误的类型。您想将该字符放在command
的第一个元素中。要做到这一点,你需要传递一个指向第一个字符的指针。您可以通过传递该角色的地址 - &command[0]
来完成此操作,尽管它与command
完全相同。
strcpy(input, command);
return input;
}
void evaluate_command(char command[250])
{
if (strcmp(command == 'I')==0)
rolodex.c:32:警告:指针和整数之间的比较
这一行有两个比较。 ==0
与strcmp
的返回值进行比较,并返回一个整数。所以它不可能是那个。
对于另一个,我们将指向char(command
)的指针与字符文字(只是一个整数,C)进行比较。这是错的。
rolodex.c:32:警告:传递'strcmp'的参数1使得指针来自整数
比较的结果是(在C中)整数。但是你需要将一个字符串传递给strcmp
。
rolodex.c:32:错误:函数'strcmp'
的参数太少
同样strcmp
有两个参数,那么这里有什么?你的意思是strcmp(command, "I")
。
{
printf("\nenterned i");
}
}
int main()
{
evaluate_command(read_command))
rolodex.c:43:警告:从不兼容的指针类型传递'evaluate_command'的参数1 rolodex.c:30:注意:预期'char *'但参数类型为'char *(*)()' rolodex.c:43:错误:预期';''''''令牌 rolodex.c:43:错误:')'标记之前的预期语句
readcommand是一个函数。你必须把它叫(用readcommand()
)
return 0;
}
答案 1 :(得分:0)
在致电evaluate_command()
时,您正在传递read_command
,其评估为指向函数read_command
的指针。
那不对,你想调用函数并将其返回值传递给evaluate_command
。
因此,请:
evaluate_command(read_command());
^
|
make
call
也就是说,您的代码中存在其他问题,例如在read_command
内部,您正在尝试从未初始化的字符串strcpy()
,这将给您未定义的行为。< / p>
您可以将read_command()
重写为:
char * read_command(void)
{
char cmd;
if(scanf("%c", &cmd) == 1)
{
char *input = malloc(25);
if(input != NULL)
{
input[0] = cmd;
input[1] = '\0'; /* Make sure it's a valid terminated string. */
}
return input;
}
return NULL;
}
请注意,失败时会返回NULL
。