stdout和stderr纠缠了吗?

时间:2019-05-30 05:01:38

标签: c stdout

我正在编写模仿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分别打印出来。 那是什么引起了这种纠缠?

0 个答案:

没有答案