把 scanf_s("%s", per[n + i].name);
成都创新互联网站建设服务商,为中小企业提供网站设计制作、成都做网站服务,网站设计,网站运营等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出成都创新互联。
改为
scanf_s("%s", per[n + i].name, 19);
看错原型了,重新修改如下,希望可以帮到你。
char*
str_cat(char
*src,
char
*dec,
int
n
)
//
不考虑src的数组溢出
{
char
*s
=
src;
while(*src++)//
找到src的结束位置,就是0结尾的地方
;
//
分号
while(n--){
//
在src的结束位置开始加入dec的字符,直到dec遇到0结束
*src
=
*dec++;
src++;
}
*src
=
0;
return
s;
}
宏在编译之前,需要进行预处理,将宏直接提换成宏定义的代码,是直接替换,也就是说,在预处理之后,你再看代码,发现宏定义已经被替换过来了,你看到是你定义之后的那一串代码。
而函数,在编译之后,有一系列调用函数的过程,比如,传参,压栈等,这部分是编译器所做的。
C 语言编译链接过程:
test.c(原始代码) -- 预处理 -- test.i(经过预处理的)-- 编译 -- test.s(汇编代码)-- 汇编 -- test.o(目标文件,其实这部分已经是单个文件的完整二进制文件了,只是还不能执行,如果不懂这句话,可以再问我,其实这部分知识,平时也很少遇到) -- 链接 -- test (可执行文件,比如一个程序由3个代码文件共同生成,那么就会有3个.o格式目标文件,链接是把多个目标文件真正的联系在一起,比如a.o 中使用了 b.o中的一个函数,那么它们两个之间的地址是如何确定的(同理,可引申到使用函数库的问题,使用printf函数,也是需要链接器进行确定printf函数地址,才能知道如何调用。)这个就是链接器的作用)
字符串连接:即将字符串b复制到另一个字符a的末尾,并且字符串a需要有足够的空间容纳字符串a和字符串b。
#includestdio.h
void mystrcat(char a[],char b[]){//把a和b拼接起来
int i=0,j=0;
while(a[i++]!='\0');
i--;
while(b[j]!='\0'){
a[i++]=b[j++];
}
a[i]='\0';
}
int main()
{
char a[100],b[100];
gets(a);
gets(b);
mystrcat(a,b);
puts(a);
return 0;
}
/*
运行结果:
abc
def
abcdef
*/