Не в состоянии читать со стандартного выхода
Я пытаюсь прочитать stdout
моей собственной программы на 2 массива, как это
#include<stdio.h>
int main ()
{
char arr[100]={0};
char arr2[100]={0};
printf("Hello world\n"); // This writes to stdout
fgets( arr, 80, stdout );
fseek ( stdout, 0, SEEK_SET );
fgets ( arr2, 80, stdout );
printf ("First array is %s\n", arr );
printf ("Second array is %s\n", arr2 );
return 0;
}
Выход не то, что я ожидаю. То есть оба массива пусты, а не содержат Hello World
как я и предполагал.
Я просмотрел этот пост, в котором предлагается работать с каналами для достижения того, чего я хочу, но не рассказываю, почему мой вышеприведенный код не работает?
РЕДАКТИРОВАТЬ: Хотя было бы неплохо узнать альтернативы, чтобы сделать вышеуказанную работу, как это должно, мне больше любопытно на проблемы, связанные с чтением stdout
той же программы
3 ответа
Не каждый файл доступен для поиска, чтения или записи. Stdout обычно является видом, который не может быть прочитан обратно.
Более вероятный, stdout
будет труба. В этом случае ваша программа имеет доступный для записи конец, а кто-то другой имеет читаемый конец. Реализация канала просто передает данные и не сохраняет их; как только он будет прочитан на другом конце, нет способа вернуть его обратно.
Если вам нужен файл, который можно прочитать обратно, создайте обычный временный файл или свой собственный канал и используйте fprintf
/fscanf
вместо printf
/scanf
, Или сделать freopen
на стандартный вывод переназначить его в другой файл / канал, затем printf
будет работать с этим новым файлом.
Я предлагаю вам использовать gotoxy, это очень простая команда, в которой вы размещаете координаты положения стандартного вывода.
COORD coord={0,0};
void gotoxy(int x,int y){
coord.X=x;coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
Это правильный код:
#include<stdio.h>
int main ()
{
char arr[100]={0};
char arr2[100]={0};
int i,j;
printf("Hello world\n"); // This writes to stdout
fgets( arr, 80, stdin );
fgets ( arr2, 80, stdin );
printf("\n");
for(i=0; i<80; i++){
printf ("%c", arr[i]);
}
for(j=0; j<80; j++){
printf ("%c", arr2[j]);
}
return 0;
}
1) fgets должен читать со стандартного ввода, а не со стандартного вывода:)
2) вы не можете распечатать весь массив с printf array
, вы должны повторить это с for
Cicle