我尝试使用strcmp。在Win32 C项目中,所有工作均正常进行,当我尝试在Eclipse Mars Atmel Avr工具链中编译此代码时,然后又失败了,然后编译失败。
使用strcmp时发生编译错误:
取消引用不完整类型的指针
struct Command{
char* address;
char* cmd;
};
struct Command* parsedCommand = ParseCommand(PCmd); //PCmd - char*
if(parsedCommand != NULL)
{
if(strcmp(ADRES, *parsedCommand ->address) == 0)
答案 0 :(得分:1)
问题在于,您既要取消引用parsedCommand
,又要使用箭头符号访问地址。
更改
*parsedCommand ->address
任何一个
parsedCommand->address
或
(*parsedCommand).address
答案 1 :(得分:1)
我缺乏必要的信誉来发表评论,因此我将其暂时发布为答案,然后根据需要进行删除/编辑。我怀疑您的简短代码清单中缺少一些有关声明了结构以及有问题的代码所在的位置。它们是在同一文件中还是在不同文件中?哪些文件包括哪些其他文件?我为什么想知道?因为以下代码将给您类似的编译错误:
parsecmd.c:
#include <stdlib.h>
struct command {
char *addr;
char *cmd;
};
struct command *
parse_command(char *str)
{
struct command *ret = malloc(sizeof *ret);
if (ret == 0) return 0;
ret->addr = ....
ret->cmd = ....
return ret;
}
main.c:
#include <string.h>
struct command *parse_command(char *str);
int
main(void)
{
...
struct command *cmd = parse_command(pcmd);
if (cmd != 0) {
if (strcmp(address, cmd->addr) == 0) ...
}
}
编译main.c
时,编译器不知道该结构的任何完整声明,这就是为什么将其称为不完整类型的原因。它还不知道结构具有哪些字段(甚至大小),因此它不知道表达式cmd->addr
的含义。
这是否适用于您,还是我完全错过了这里的标记?如果是这样,将完整的struct声明移到头文件中,该头文件包含在使用该结构的所有源文件中,应该可以解决此问题。
答案 2 :(得分:0)
我没有包括Command strucutre的定义。当我包含结构的定义时,一切都很好。