「C言語 文字列操作+ファイル入出力 完全制覇」訂正情報
p.178 リスト5-3-9
リスト5-3-9のListDump関数の修正(<---のところを修正・追加してください)
int LineDump( FILE *ifp, FILE *ofp ) { unsigned char strbuf[ BUF_SIZE + 2 ]; // <--- charをunsigned charに変更 int c, i, j; // <--- int宣言でjを追加 for ( i = 0; i < BUF_SIZE; i ++ ) { c = fgetc( ifp ); if ( c == EOF ) break; fprintf( ofp, "%02x ", c ); strbuf[ i ] = c; } if ( isKanji1( c ) ) /* 最後が漢字1バイト目なら */ { int c2 = fgetc( ifp ); /* 次の1バイトも読込む */ if ( isKanji2( c2 ) ) /* 漢字2バイト目なら保存する*/ strbuf[ i ] = c2; ungetc( c2, ifp ); /* ストリームに返す */ i ++; } strbuf[ i ] = '\0'; for ( j = 0; j < i; j ++ ) /* 表示できない文字を置き換える */ { if ( isspace( strbuf[ j ] ) ) // <--- <--- cをstrbuf[ j ]とし、元の行を2つに分けました strbuf[ j ] = ' '; // <--- 空白文字の場合は,バッファ上のデータをスペースに変更 else if ( isKanji1( strbuf[ j ] ) && isKanji2( strbuf[ j + 1 ] )) j ++; else if ( ! isprint( strbuf[ j ] ) ) /* 表示できないコードは'.'にする */ strbuf[ j ] = '.'; } for ( ; i < BUF_SIZE; i ++ ) fprintf( ofp, "-- " ); fprintf( ofp, " %s\n", strbuf ); return c; }