ページ 11

フルパスの記述について

Posted: 2007年5月07日(月) 08:32
by やっかい者
c:\\windows\\system32\\notepad.exe

パスはこのように記述しますが、実行の時点では\\の部分が何か1バイト文字に
変換されています。

このように記述する意味を教えてください、
実行時に\\は何を基準に変換するのでしょうか?
OSとかマシンとかでしょうか?

ご教授よろしくお願いします。

Re:フルパスの記述について

Posted: 2007年5月07日(月) 08:40
by 組木紙織
osなどは関係ありません。
c言語では
"\n"→改行
"\t"→タブ
"\\"→\
となります。

Re:フルパスの記述について

Posted: 2007年5月07日(月) 09:28
by やっかい者
早速の回答ありがとうございます。

改行やタブは制御コードなのでストリングとしてテキストに直接
書き込みできないのですが、\は1バイトのキャラクタ文字で書き込み
可能なのではないでしょうか?

ファイル階層の区切りに\1個ではだめなのですね、\はファイル文字には
使えないので混同する心配もないと想うのですが・・・

いずれにしても、今回の件は実行後にフルパスを指定する場合は
\\を\(0x5C)に置き換えてその後のストリングを前詰めにすればOKでようか?

Re:フルパスの記述について

Posted: 2007年5月07日(月) 09:50
by 管理人
すみません、回答していることがご質問の意図と違っていたらスミマセン。
#include <stdio.h>

void main(){

	printf("%d\n",'\0');
	printf("%d\n",'\n');
	printf("%d\n",'\t');
	printf("%d\n",'\\');

	char st[3];

	st[0]='\\';
	st[1]='\\';
	st[2]='\0';

	printf("%s\n",st);
}

実行結果

0
10
9
92
\\
ご質問の意図をはっきり理解していないのですが、
\\は\に変換されて、1バイトとなります。
そもそも文字は全部文字コードで管理されていますから、
http://hp.vector.co.jp/authors/VA008536/data/ascii.html

>\は1バイトのキャラクタ文字で書き込み 可能なのではないでしょうか?

サンプルの通り、\\とかけば\に変換されますから、書き込みできますよ。
2つ続けたいのなら4つ書けばいいと思います。

Re:フルパスの記述について

Posted: 2007年5月07日(月) 10:38
by やっかい者
ありがとうございます。
この課題をビルドして実行ファイルをバイナリーエディタで見ると確かに
\\は\に変換されていました、またパスのストリングの前詰めの
操作は必要なく。
実行時のパス名変更は、その書き込みoffsetに注意が必要のようです

またまたお世話になりました。