//------------------------------------------------------------------------------
// 標準入力の各行を逆順にして標準出力する
//------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX_LINE 1000 // 入力行の最大長
typedef struct LN_LINK // 各行のリンクリスト
{
struct LN_LINK *next;
char line[1];
}
LINE_LINK;
int main( int argc, char *argv[] )
{
char line[ MAX_LINE ];
LINE_LINK *top_lp;
LINE_LINK *cur_lp;
// 標準入力の各行を読み込んで、リンクリストにスタックする
top_lp = NULL;
while( fgets( line, MAX_LINE, stdin ) != NULL )
{
cur_lp = (LINE_LINK*) malloc( sizeof( LINE_LINK ) + strlen( line ) );
if( cur_lp == NULL ) // メモリーが足りない?
{
while( fgets( line, MAX_LINE, stdin ) != NULL )
continue; // 残りの行を読み飛ばす
break;
}
strcpy( cur_lp->line, line );
cur_lp->next = top_lp;
top_lp = cur_lp;
}
// リンクリストの先頭から各行を取り出して標準出力に書き出す
while( top_lp != NULL )
{
fputs( top_lp->line, stdout );
cur_lp = top_lp;
top_lp = top_lp->next;
free( cur_lp );
}
return 1;
}