■動 作 環 境 :Windows2000
■開 発 環 境 :Visual C++6.0
お世話になってます。
表記の通りですが、CString.Format() についてですが
int 型の変数の値をCString に代入したいのです。
CString型OBJ.Format(%s,int型変数);
とやっているのですが、実行させると (MSVCRTD.DLL) で例外となってしまいます。
ファイルは OUTPUT.C という所で止まります。
これは MFCの関数なので何をやっているやらさっぱりなのですが・・・。
/* UNDONE: handle '#' case properly */
/* scan for null upto i characters */
#else /* _UNICODE */
if (flags & (FL_LONG|FL_WIDECHAR))
{
if (text.wz == NULL) /* NULL passed, use special string */
text.wz = __wnullstring;
bufferiswide = 1;
pwch = text.wz;
while ( i-- && *pwch )
++pwch;
textlen = pwch - text.wz;
/* textlen now contains length in wide chars */
}
else
{
if (text.sz == NULL) /* NULL passed, use special string */
text.sz = __nullstring;
p = text.sz;
→ while (i-- && *p)
++p;
textlen = p - text.sz; /* length of the string */
}
→ の部分で停止しているんですよ。
Formatの使い方が間違っているでしょうか?
>String型OBJ.Format(%s,int型変数);
String型OBJ.Format(%d,int型変数);
↑でやってみったらどうですか?
ついでに
http://www.microsoft.com/JAPAN/developer/library/vcmfc/_mfc_cstring.3a3a.format.
htm
↑ここも見てみたらどうでしょう。
int型は %d だったような・・・
double型は %f or %e(指数表示)
いろいろあります.うまく対応させて使うところです.
C言語の本を参考にすると載っていると思われます.
>String型OBJ.Format(%s,int型変数);
%sにすると、int型変数の値をアドレスとみて、そのアドレスにある文字列であるはずのデ
ータにアクセスしようとしてしまいます。ですから、ほとんどの場合メモリアクセス例外が発生
するでしょう。
出力形式はC言語のprintfやsprintf関数で学習する事柄ですね。
C言語辞典などを1冊持っていると便利ですよ。
お世話になっております。
int 型の変数の値をCString に代入したい時は、
CString型OBJ.Format(%s,int型変数);
「この文字列型OBJに、int型の変数の値を 文字列 に変換して代入する」
という意味ですよね。C の sprintf文 と同じという事は。
であれば、%s は文字列ですからやはり %s で正しいのではないですか?
int型 → 文字列型 への変換後代入ですよね?
間違っていますかね?
> %s は文字列ですからやはり %s で正しいのではないですか?
%sは文字列変数に対してのみ使用できます。上記のアドレスになってしまうという説明は分か
りにくかったですか?
> int型 → 文字列型 への変換後代入ですよね?
変換するために%dでint型変数が数値であることを指定しているのです。
サンプルを載せておきましたので試してみてください。
int a=10;
const char s[] = abcdefg;
long adr = (long)s; // 文字列「abcdefg」のアドレス
printf(%s\n, s ); // 出力結果:「abcdefg」
printf(%d\n, adr ); // 出力結果:「6818600」(数値が違うこともあります)
printf(%s\n, adr ); // 出力結果:「abcdefg」
printf(%d\n, a ); // 出力結果:「10」
// printf(%s\n, a ); // メモリアクセス例外発生
どうも、お世話様です。
つまりこういう事ですか。
CString型OBJ.Format(%?,変数);
の場合、代入後の型は文字列型で決定しているのだから
あくまで Format で指定するのは、代入(変換)元の型を記述するって事ですね。
それは sprntf 文の時から完全に誤解しておりました。
てっきり ”何に変換するのか ”を指定するものだと思っておりました。
ありがとうございました。