stdout и stderr запутались? - PullRequest
0 голосов
/ 30 мая 2019

Я пишу функцию, имитирующую 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 распечатываются отдельно.Тогда что могло быть причиной этого запутывания?

...