使用strcmp和* char时出现段错误

3

我有这个结构体

typedef struct no
{
    char command[MAX_COMMAND_LINE_SIZE];
    struct no * prox;
} lista;

lista *listaCommand = NULL;

我正在使用一个简单的函数来填充listaCommand,看起来这个函数可以正常读取值,但是如果我尝试进行比较,例如:

strcmp(listaCommand->prox>command, ">")

即使值是存在的,我还是遇到了分段错误,为什么会发生这种情况?


你如何初始化 lista?以及 lista->command - Lorenzo Dematté
2
你错过了,更正为 -> strcmp(listaCommand->prox->command, ">") - Navnath Godse
这段代码出现问题并不意味着这是唯一的问题。如果Navnaths的答案不能解决你的问题,请使用strcmp编写一个最小的、可编译的测试用例来产生你的段错误。@Dante003 - autistic
从我们所看到的,“我正在使用一个似乎工作正常的简单函数填充listaCommand”。OP 可能会无意中使我们对其他错误视而不见,这就是为什么我要求提供一个最小的可编译测试用例... - autistic
你是在询问 > 运算符和 -> 运算符之间的区别吗? - autistic
显示剩余2条评论
3个回答

10
strcmp(listaCommand->prox>command, ">") 
应该是这样的。
strcmp(listaCommand->prox->command, ">")

在你的代码中,listaCommand->prox>command 将被视为一个比较操作,使用 > 运算符。在 C 中,比较操作返回一个整数,如果为假,则返回 0,否则返回非零值。很有可能它会返回 0,这不是一个有效的内存地址。因此,会出现段错误。


0

更改

strcmp(listaCommand->prox>command, ">")

strcmp(listaCommand->prox->command, ">")

0

分配内存!!!

typedef struct no
{
    char str[20];
    struct no * prox;
} lista;

lista *listaCommand = NULL;

int main(int argc, char** argv)
{
    listaCommand = malloc(sizeof(lista));
    listaCommand->prox = malloc(sizeof(lista));
    strcpy(listaCommand->prox->str, "aaa");
    printf("%d\n", strcmp(listaCommand->prox->str, ">>"));

    free(listaCommand->prox);
    free(listaCommand);

    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接