第六章-结构

问题:E:\code\test_c\main.c|20|error: conflicting types for 'strdup'|

            E:\code\test_c\main.c|69|error: conflicting types for 'strdup'|

不知道为什么会这样?

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

#define MAXWORD 100

struct tnode {
    char *word;           /* 树的节点 */
    int count;            /* 指向单词的指针 */
    struct tnode *left;   /* 左子节点 */
    struct tnode *right;  /* 右子节点 */
};

struct tnode *addtree(struct tnode *, char *);
struct tnode *talloc(void);

void treeprint(struct tnode *);
int getword(char *, int);
char *strdup(char *);

/* 单词出现频率的统计 */
int main()
{
    struct tnode *root;
    char word[MAXWORD];

    root = NULL;
    while (getword(word, MAXWORD) != EOF)
        if (isalpha(word[0]))
            root = addtree(root, word);
    treeprint(root);
    return 0;
}
/* addtree函数:在p的位置或p的下方增加一个w节点 */
struct tnode *addtree(struct tnode *p, char *w)
{
    int cond;
    if (p == NULL) {       /* 该节点为空 */
        p = talloc();      /* 创建一个新节点 */
        p->word = strdup(w);
        p->count = 1;
        p->left = p->right = NULL;
    } else if ((cond = strcmp(w, p->word)) == 0)
        p->count++;        /* 新单词与节点中的单词匹配 */
    else if (cond < 0)     /* 如果小于该节点中的单词,则进入左子树 */
        p->left = addtree(p->left, w);
    else                   /* 如果大于该节点中的单词,则进入右子树 */
        p->right = addtree(p->right, w);
    return p;
};

/* treeprint函数:按序打印树p */
void treeprint(struct tnode *p)
{
    if (p != NULL) {
        treeprint(p->left);
        printf("%4d %s\n", p->count, p->word);
        treeprint(p->right);
    }
}

/* talloc函数:创建一个tnode */
struct tnode *talloc(void)
{
    return (struct tnode *) malloc(sizeof(struct tnode));
};

char *strdup(char *s)
{
    char *p;

    p = (char *) malloc(sizeof(strlen(s)) + 1);
    if (p != NULL)
        strcmp(p, s);
    return p;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值