110吗我要报警表情:Visual C++编译出错?请问怎么回事呢。

来源:百度文库 编辑:中科新闻网 时间:2024/05/08 14:47:19
程序是没错的,以下是程序,是书上的例子来的。但编译的时候出现错误。
#include "stdio.h"

char s[]="This is a string";

main()
{
char c,*p,*strchr();
scanf("%c",&c);
p=strchr(s,c);
if(p==NULL)
printf("Char %c not found\n",c);
else
printf("%s\n",p);
}

char *strchr(s,c)
char *s,c;
{
char *p=NULL;
do
{
if(*s==c)
{p=s;
break;}
}while(*++s!='\0');
return (p);
}

以下是错误提示:
Compiling...
PointFunction.c
Linking...
LIBCD.lib(strchr.obj) : error LNK2005: _strchr already defined in PointFunction.obj
Debug/PointFunction.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

PointFunction.exe - 1 error(s), 0 warning(s)
问题出来了,在以下各位朋友提供的方法,都试过了。都错误,不知道怎么回事。

你的代码有好几个错误

首先,你头文件用""括起来不好
在编译器编译代码的时候
遇到头文件用<>括起来
它会现在include 文件夹里面查找需要的头文件
如果头文件是用""括起来
它则先在代码所在文件夹查找
你这样使编译速度变慢
在某些编译器里面甚至会报错,说找不到 "stdio.h"

其次,标准C里面规定 main函数必须用int 来声明,并且返回一个值
在中国有许多书是用void 来声明 main的返回值,甚至不写,这在有些编译器里面可以通过,但是这样是极其危险的。

第三,你第四行char c,*p,*strchr(); 的 *strchr()本意为声明函数原型
可是你在原型中,函数的输入值为空,与你函数的实现char *strchr(char *str, char c); 不符合

第四,你函数的实现部分char *strchr(s,c) ,没有声明参数的类型

第五,既然char *strchr(s,c) 函数里面,s和c是输入的参数,你就不能在函数里面再次声明。

第六,花括号应该紧接函数名char *strchr(s,c)

我把你的代码修改了一下
你对照着看一下你错在哪里吧

#include <stdio.h>

char s[]="This is a string";

int main()
{
char c,*p;
char *strchr(char s[],char c);
scanf("%c",&c);
p=strchr(s,c);
if (p==NULL)
printf("Char %c not found\n",c);
else
printf("%s\n",p);
return 0;
}

char *strchr(char s[],char c)
{
char *p=NULL;
do
{
if (*s==c)
{
p=s;
break;
}
}
while(*++s!='\0');
return (p);
}

最后我要说

我敢说
这代码绝对不是书里面的
一定是给你抄错了

如果我说错了
请把你那本教材丢掉
太差劲了

中国的计算机教材大多都太浮躁、太功利了
编程思想落后、编程风格不严谨、太随便,漏洞百出容易出错
建议你有条件的话
最好采用外国的译本或原本教材

回L_o_o_n_i_e ,如果没有加入string.h头文件
strchr就不是保留字,
这个你错了
还有
这道题目的意图本来就是“重写strchr函数”……

换函数名 char *strchr(s,c) 为:

char *my_strchr(char *s,char c){
char *p=NULL;
不变
....
}

在 main() 以前 加原型声明:
char *my_strchr(char *s,char c);

删去 char c,*p,*strchr(); 中的 ",*strchr()";
变成 char c,*p;
=========================================

strchr 是保留字,不可用。

老式写法char *strchr(s,c)
char *s,c;
{ 。。。。}
别用了 !

函数名: strchr
功 能: 在一个串中查找给定字符的第一个匹配之处
用 法: char *strchr(char *str, char c);

你main函数里第一行的这个*strchr()太怪了,删掉。看看行不行。