问题: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;
}