你自己写的strcat函数在第一次while中一直p++到了'\0'的后一位(因为p++是先赋值再加1),所有在printf的时候遇到'\0'就停止打印了,后边的字符串就显示不出来了。应该在第一个while下边写一个p--;让p指针指向'\0'
创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元阳谷做网站,已为上家服务,为阳谷各地企业和个人服务,联系电话:18980820575
#include "stdio.h"
#include "string.h"
int main()
{
char str[100]={0};
char max;
int i,len,pos;
printf("输入一个字符串:");
gets(str);
len=strlen(str);
max=str[0];
pos=0;
for(i=1;ilen;i++) //找最大字符位置
if(str[i]max)
{
max=str[i];
pos=i;
}
for(i=pos;i0;i--)//移位
str[i]=str[i-1];
str[0]=max;//最大字符放在首位
puts(str);
}
链接错误,说明编译器没有找到相关符号
声明:void butler (void)
实现:void bulter (void)
调用: butler ()
比较一下
你的程序没有问题
vc6.0 编译
q=(sin(x*PI/180)+sin(y*PI/180))/tan(z*PI/180);处出现
warning:“e:\c\bhj\bhj.cpp(16) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data”
这是因为sin 和 tan的 返回值是双精度double类型。把它赋值给 float q,就会丢失数据。
但是计算结果是基本正确的。如果想更精确计算 就把所有的 float 全部改成 double
函数原型能告诉编译程序一个函数将接受什么样的参数,将返回什么样的返回值,这样编译程序就能检查对函数的调用是否正确,是否存在错误的类型转换。例如,现有以下函数原型;
int
some_func(int,char·,long);
编译程序就会检查所有对该函数的引用(包括该函数的定义)是否使用了三个参数并且返回一个int类型的值。如果编译程序发现函数的调用或定义与函数原型不匹配,编译程序就会报告出错或警告消息。例如,对上述函数原型来说,当编译程序检查以下语句时,就会报告出错或警告消息:
x
=
some_func(l);
/*
not
enough
arguments
passed
*/
x
=
somc_funcc*hellol",
1,
"dude:");
/*
wrong
type
of
arguments
used
*/
x
=
aome_funcd,
sir,
2879,
"t");
/*
too
many
arguments
passed
*/
下例中的函数调用同样是不正确的,因为函数some_func()的返回值不是一个long*类型的值。
lvalue=some_func(1,str,2879);
/*some_rune()returns
anint,not
a
long*
*/
同样,编译程序还能检查函数的定义(或函数体)是否与函数原型匹配。例如,当编译程序检查以下函数定义时,就会报告出错或警告消息:
int
some_func(char
*string,longlvalue,int
ivalue)
/*
wrong
order
of
{
parameters
*/
......
}
总之,在源文件中说明函数原型提供了一种检查函数是否被正确引用的机制。目前许多流行的编译程序都会检查被引用的函数的原型是否已在源文件中说明过,如果没有,就会发出警告消息。