属函数
我们可以写一个有用的变分函数若要连接任意数目的字符串,请执行以下操作:#include // calloc#include // va_*#include // strlen, strcpychar* concat(int count, ...){
va_list ap;
int i;
// Find required length to store merged string
int len = 1; // room for NULL
va_start(ap, count);
for(i=0 ; i
len += strlen(va_arg(ap, char*));
va_end(ap);
// Allocate memory to concat strings
char *merged = calloc(sizeof(char),len);
int null_pos = 0;
// Actually concatenate strings
va_start(ap, count);
for(i=0 ; i
{
char *s = va_arg(ap, char*);
strcpy(merged+null_pos, s);
null_pos += strlen(s);
}
va_end(ap);
return merged;}
使用#include // printfvoid println(char *line){
printf("%s\n", line);}int main(int argc, char* argv[]){
char *str;
str = concat(0); println(str); free(str);
str = concat(1,"a"); println(str); free(str);
str = concat(2,"a","b"); println(str); free(str);
str = concat(3,"a","b","c"); println(str); free(str);
return 0;}
产出:// Empty linea
ab
abc
清理
请注意,当分配的内存变得不需要时,您应该释放它以避免内存泄漏:char *str = concat(2,"a","b");println(str);free(str);