c - 请求成员不是结构或 union ,而是结构

标签 c binary-search-tree strncmp

这段代码是我为学校作业做的二叉搜索树。

#include "binary_tree.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 10


Node* create_tree() {

return NULL;

}

void insert_tree(Node** root, char* nname, char* number) {


    if (*root==NULL){
        Node* node = (Node *)malloc(sizeof(Node));

        strncpy(node->name , nname, MAXLEN);
        strncpy(node->number , number, MAXLEN);

        node->left = node->right = NULL;
        *root = node;
        return;

    }


    if (strncmp(*root->name, nname, MAXLEN)) {

        insert_tree(&(*root)->left, nname, number);

    } else {

        insert_tree(&(*root)->right, nname, number);
    }
}

void preorder(Node* node, int level){
    int i;
    if (node==NULL){
        //printf("null\n");
        return;

    }
    for (i = 0; i<level; i++) {
        printf("  ");
    }
    printf("%s %d\n", node->name, level);

    preorder(node->left, level + 1);
    preorder(node->right, level + 1);

}

这是我的完整代码。 好吧,我删除了一些不必要的代码,但这就是我需要知道的一切..

typedef struct t_node {
    char name[MAXLEN + 1];
    char number[MAXLEN + 1];
    struct t_node *left;
    struct t_node *right;

} Node;

这是我正在使用的节点类型。

在insert_tree中,插入一个节点即可。

但是当我使用 strncmp 时,它会出错。

"Request for member in something not a structure or union"

root 不是一个节点结构吗?

我不明白为什么会出现错误。

最佳答案

参见 operator precedence ,其中 -> 优先于 *。您应该使用 (*root)->name 作为您的 strncmp() 调用的参数。

关于c - 请求成员不是结构或 union ,而是结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260088/

相关文章:

c - error函数和printf函数的区别

ruby-on-rails - Rails BST 时区实现

c - 如何消除 bst_insert_node 函数中的此段错误?

c - 如何将字符与 C 中的给定字符集进行比较?

c - 我有以下 gcc 编译警告

c - 代码中的语义错误

c++ - 如何使用stringstream C++递归打印出二叉搜索树中的所有节点

c - Strncmp:异常段错误

c - 得到 "error: expected identifier or ' ('"