我正在编写模仿printf的函数。
int prf(char *string,...){
char out_char;
int out_int;
char *out_string;
char intstr[30];
va_list argp;
va_start(argp,string);
for(int i=0;*string != '\0';i++){
if(*string != '%'){
fwrite(string,1,1,stdout);
}
else{
switch(*++string){
case 'c':
out_char =va_arg(argp,int);
fwrite(&out_char,1,1,stdout);
debug("WOW");
break;
case 'd':
out_int = va_arg(argp,int);
snprintf(intstr,30,"%d",out_int);
prstring(&intstr,stdout);
break;
case 's':
out_string =va_arg(argp,char *);
int j =0;
while(out_string[j] !='\0'){
fwrite(&out_string[j],1,1,stdout);
j++;
}
break;
default:
sentinel("this shouldnt appear");
}
}
string++;
}
va_end(argp);
return 0;
error:
va_end(argp);
return -1;
然后我放置了一个在这里定义的调试功能:
#define debug(M,...) fprintf(stderr,"DEBUG: (%s :%d :%s) " M "\n",__FILE__,__LINE__,__FUNCTION__,##__VA_ARGS__)
当我使用该功能时:
prf("1235 %d 1123 %c",12,'1');
程序返回此
DEBUG: (1235 12 1123 1E:\gay\ex25_1.c :31 :prf) WOW
除调试打印外,其他所有操作均正常。 据我所知,stdout和stderr分别打印出来。 那是什么引起了这种纠缠?