参数可变的函数
#include <stdio.h>
#include <stdarg.h>
int mymax(int count, ...){
int maxm=-1;
va_list address;
int i,number;
va_start(address,count); /* 设置 address为第一个参数的地址 */
for(i=0;i<count;i++){
number=va_arg(address,int); /* 得到该地址的数字,且下移指针 */
maxm=maxm>number?maxm:number;
}
return maxm;
}
int main(){
int a[5];
int sum;
puts("enter some numbers, the numbers is not more than 5");
while(~scanf("%d",&sum) && sum){
for(int i=0;i<sum;i++) scanf("%d",&a[i]);
switch (sum){
case 1:
printf("%d\n",mymax(sum,a[0]));
break;
case 2:
printf("%d\n",mymax(sum,a[0],a[1]));
break;
case 3:
printf("%d\n",mymax(sum,a[0],a[1],a[2]));
break;
case 4:
printf("%d\n",mymax(sum,a[0],a[1],a[2],a[3]));
break;
case 5:
printf("%d\n",mymax(sum,a[0],a[1],a[2],a[3],a[4]));
break;
}
}
return 0;
}
strncat
strncat(string1,string2,n):
将字符串1和2连接在一起,不过可以指定字符串2中追加到1的长度。如果n大于等于string2的长度,那么效果和strcat等价,如果小于长度值,那么我们可以连接一部分。
比如:
#include <stdio.h>
#include <string.h>
int main(){
char s1[5]="1234";
char s2[10]="abcdefghi";
strncat(s1,s2,19);
printf("%s\n", s1);
return 0;
}
/*
for strncat(s1,s2,19) :
1234abcdefghi
for strncat(s1,s2,4) :
1234abcd
*/
strncpy
char *strncpy(char *dest, const char *src, size_t n);
strncpy()会将参数src字符串拷贝前n个字符至参数dest所指的地址。
如果src的字符个数小于n就用空格填充。
下面是它和strcpy()的对比:
int main(){
char s1[]="I love Beijing.";
char s2[]="I'm Chinese.";
strncpy(s1,s2,8);
printf("%s\n", s1);
strcpy(s1,s2);
printf("%s\n", s1);
return 0;
}
/*
I'm Chineijing.
I'm Chinese.
*/
strncmp
关于两个字符串的比较:
1)他们字符串长度不相等,但是相应的字符都是一样的。 长的字符串>短的字符串
2)存在相同位置字符不等的情况。字符大的优先级高
和strcmp()对应的函数strncmp(),它可以指定字符串比较的长度。
例如:
char s1[8]="abcdef";
<