平成21年春期試験午後問題 問9

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問9 ソフトウェア開発(C)

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

〔プログラムの説明〕
 与えられたパスを絶対パスに変換する関数 convert である。
 階層構造をもつファイルシステムにおいて,ファイルやディレクトリを 特定する文字列をパスという。ルートディレクトリを基準としたパスを絶対パスと呼び,"/"から始まり,各階層を"/"で区切っていく。与えられたパスがディレクトリのとき,最後の"/"はあってもなくてもよい。例えば,図のディレクトリeの絶対パスは "/a/d/e"又は"/a/d/e/"で示す。
 一方,カレントディレクトリを基準としたパスを相対パスと呼び,相対パスを 指定するときに階層を一つ上にたどる場合は".."を用いる。 例えば,図においてディレクトリ c をカレントディレクトリにした場合,ファイル file1.txt の相対パスは"../file1.txt",ディレクトリ e の相対パスは"../../d/e"又は"../../d/e/"となる。また,カレントディレクトリ自身は"."又は"./"で示す。
pm09_1.png
  • 関数の仕様は,次のとおりである。
    pm09_2.png
    引数:
    path 変換前のパス
    base カレントディレクトリの絶対パス
    result 変換後の絶対パス
    機能:
    path が相対パス表記であれば,base を基準にした絶対パス表記に変換し,result に格納する。path が絶対パス表記であれば,result には base に関係なくpathをそのまま格納する。
    返却値:
    なし。
    ただし,result が参照する領域は,変換後の文字列を格納するのに十分であるとする。また,冗長なパス又はパスとして認識できない文字列が引数として与えられることはないものとする。
  • ファイルシステム上に,指定されたディレクトリやファイルが実際に存在するかどうかのチェックは行わない。
  • 変換例を表1に示す。
    pm09_3.png
  • 次のライブラリ関数を用いる。
    unsigned int strlen(const char *s);
    機能:
    文字列sの長さを計算する。
    返却値:
    終端を示すナル文字に先行する文字の個数を返す。
    int strcmp(const char *s1, const char *s2);
    機能:
    文字列s1と文字列s2を比較する。
    返却値:
    s1とs2が同一文字列の場合は0,それ以外の場合は0以外を返す。
    int strncmp(const char *s1, const char *s2, int n);
    機能:
    文字列s1と文字列s2を先頭からn文字,又はナル文字までを比較する。
    返却値:
    比較したn文字が同一の場合は0を,それ以外の場合(比較が途中で終了した場合も含む)は0以外を返す。
    char *strcpy(char *s1, const char *s2);
    機能:
    文字列s1に文字列s2をナル文字まで複写する。
    返却値:
    s1
    char *strncpy(char *s1, const char *s2, int n);
    機能:
    文字列s1に文字列s2をn文字複写する。s2の長さがn以上の場合はn文字目までを複写し,n未満の場合は残りをナル文字で埋める。
    返却値:
    s1
pm09_4.png

設問1

プログラム中の に入れる正しい答えを,解答群の中から選べ。
a,b に関する解答群
  • strcpy(base, path)
  • strcpy(base, result)
  • strcpy(path, base)
  • strcpy(path, result)
  • strcpy(result, base)
  • strcpy(result, path)
c に関する解答群
  • bp - base
  • bp - path
  • pp - base
  • pp - path
d に関する解答群
  • base + length
  • bp + length
  • path + length
  • pp + length
  • result + length
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • a=
  • b=
  • c=
  • d=

解説

この設問の解説はまだありません。

設問2

表2の引数列で関数 convert を呼んだときのプログラムの動作について,表2中の に入れる正しい答えを,解答群の中から選べ。ただし,プログラム中のadには正しい答えが入っているものとする。
pm09_5.png
e に関する解答群
  • ../d/
  • ../../../../d/
  • /
  • /../d/
  • /d/
  • d/
f,g に関する解答群
  • /a/b/c/d
  • /a/b/c/d/
  • /a/b/cd
  • /a/b/cd/
  • d
  • d/
解答選択欄
  • e:
  • f:
  • g:
  • e=
  • f=
  • g=

解説

この設問の解説はまだありません。

Pagetop