基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成16年 秋期 基本情報技術者 午後 問06
問06   C言語

次の C プログラムの説明及びプログラムを読んで,設問に答えよ。

〔プログラムの説明〕

CGI などへのリクエストの際に文字列パラメタを URL に含める場合には, その文字列パラメタを決められた規則に従って変換し送出する必要がある。 このプログラムは,それに用いる変換プログラム URLEncode である。

(1) 変換対象の文字列パラメタは,JIS X 0201( 7 ビット及び 8 ビットの情報交換用符号化文字集合) の文字で構成される。 また,文字列パラメタの途中にナル文字(文字符号 0x00)は含まれないものとする。

(2) 変換規則は次のとおりである。

@ 英数文字(0x30 〜 0x39,0x41 〜 0x5A,0x61 〜 0x7A)及び“@”(0x40),“*”(0x2A), “-”(0x2D),“.”(0x2E),“_”(0x5F)は変換しない(これらの文字を以降,無変換文字と呼ぶ)。

A @ に含まれない文字は,“%”の後に文字符号の2けたの 16 進表記を続けた 3
文字に変換する。例えば,文字符号 0x5E の文字は“%5E”と変換する。

(3) 関数 URLEncode の仕様は,次のとおりである。

形式: void URLEncode( unsigned char *input,

             unsigned char *output )

引数: input 変換前の文字列が格納されている文字型配列へのポインタ

    output 変換後の文字列を格納する文字型配列へのポインタ

(4) output が指す配列は,変換後の文字列を格納するのに十分な領域が確保されているものとする。

(5) 例えば,“Hi!”という文字列パラメタを変換した結果は図のとおりとなる。

      図 文字列パラメタの変換例

(6) 次の関数があらかじめ用意されている。

形式: int replaceChar( unsigned char c )

引数: c

返却値:文字 c が無変換文字の場合は 0 を,それ以外の場合は 1 を返す。

基本情報技術者試験


〔プログラム〕

int replaceChar( unsigned char );
void URLEncode( unsigned char *input, unsigned char *output ) {
    const unsigned char chars[] = "0123456789ABCDEF";
    while( *input != '\0' ) {
        if ( replaceChar(  ) ) {
            *output++ = '%';
            *output++ = chars[  ]; 
            *output++ = chars[  ];
        } else {
            *output++ = *input;
        }
        ;
    }
    *output = '\0';
}   

基本情報技術者試験


設問 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

a,d に関する解答群

ア &input    イ (&input)++    ウ (*input)++

エ **input     オ **input++       カ *input

キ input      ク input++

b,c に関する解答群

ア *input << 4    イ *input >> 4

ウ *input & 0x0F    エ *input & 0xF0

オ *input ^ 0x0F      カ *input ^ 0xF0

キ *input | 0x0F      ク *input | 0xF0

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]