我正在尝试将自己程序的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
。
我经历了this post,建议处理管道来完成我想要的但是没有告诉我为什么我的上述代码不起作用?
编辑:虽然知道替代方案以使其完成上述工作会很好,但我对阅读相同程序的stdout
所涉及的问题更加好奇
答案 0 :(得分:5)
并非每个文件都是可搜索,可读或可写的。标准输出通常是一种无法回读的。
最有可能的是,stdout
将是一个管道。在这种情况下,您的程序保存可写端,而其他人持有可读端。管道实现只传输数据而不保留数据;一旦在另一端阅读,就无法将其取回。
如果您想要一个可以回读的文件,创建一个常规临时文件或您自己的管道,并使用fprintf
/ fscanf
而不是printf
/ {{1} }。或者,在stdout上执行scanf
以将其重新分配给另一个文件/管道,然后freopen
将对该新文件进行操作。
答案 1 :(得分:0)
这是正确的代码:
#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必须从stdin读取而不是从stdout读取:)
2)您无法使用printf array
打印所有数组,必须使用for
cicle进行迭代
答案 2 :(得分:0)
我建议你使用gotoxy,它是一个非常简单的命令,你可以在其中放置stdout位置的坐标。
COORD coord={0,0};
void gotoxy(int x,int y){
coord.X=x;coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}