![]()
平成21年 春期 基本情報技術者 午後 問09
問09 C言語次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 与えられたパスを絶対パスに変換する関数 convert である。 階層構造をもつファイルシステムにおいて,ファイルやディレクトリを 特定する文字列をパスという。ルートディレクトリを基準としたパスを絶対パスと呼び, “/”から始まり,各階層を“/”で区切っていく。与えられたパスがディレクトリのとき, 最後の“/”はあってもなくてもよい。例えば,図のディレクトリ e の絶対パスは “/a/d/e”又は“/a/d/e/”で示す。 一方,カレントディレクトリを基準としたパスを相対パスと呼び,相対パスを 指定するときに階層を一つ上にたどる場合は“..”を用いる。 例えば,図においてディレクトリ c をカレントディレクトリにした場合, ファイル file1.txt の相対パスは“../file1.txt”,ディレクトリ e の相対パスは “../../d/e”又は“../../d/e/”となる。また,カレントディレクトリ自身は “.”又は“./”で示す。
![]() 図 階層構造をもつファイルシステムの例 void convert(const char *path, const char *base, char *result);
引数:path 変換前のパス 機能:path が相対パス表記であれば,base を基準にした絶対パス表記に変換し, result に格納する。path が絶対パス表記であれば,result には base に関係なく path をそのまま格納する。 返却値:なし。 ただし,result が参照する領域は,変換後の文字列を格納するのに十分であるとする。 また,冗長なパス又はパスとして認識できない文字列が引数として与えられることはないものとする。 (3) 変換例を表1に示す。
(4) 次のライブラリ関数を用いる。
機能:文字列 s の長さを計算する。 返却値:終端を示すナル文字に先行する文字の個数を返す。
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, int n);
char *strcpy(char *s1, const char *s2);
char *strncpy(char *s1, const char *s2, int n);
#include <string.h> void convert(const char*, const char*, char*); void convert(const char *path, const char *base, char *result){ const char *pp, *bp; char *rp; int length; /* pathが絶対パス表記の場合 */ if(*path == '/'){設問1 プログラム中の ![]() a,b に関する解答群 ウ strcpy(path, base) エ strcpy(path, result) オ strcpy(result, base) 力 strcpy(result, path) ウ pp - base エ pp - path ウ path + length エ pp + length オ result + length
設問2 表2の引数列で関数 convert を呼んだときのプログラムの動作について,表2中の ![]() ![]() ![]()
e に関する解答群 ウ / エ /../d/ オ /d/ 力 d/ ウ /a/b/cd エ /a/b/cd/ オ d 力 d/
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||||||||||||||||||||||||||||