• ベストアンサー

"文字列"に関数を埋め込めるか

VBで人が作ったソースを読んでいました。 lbuf = New String() {"*「そなたが つぎのレベルになるには", _ "  あと " & NumberStringToWide(dist.ToString()) & "ポイントの", _ "  けいけんが ひつようじゃ。", _ 見たいなコードがあって、どうやら文字列に関数を埋め込んでいたみたいです。 C言語でこれに相当することはできますでしょうか? 説明しやすいように分かる範囲で書いてみました。 #include <stdio.h> char *Message[] = { "次のレベルアップは /*ここに関数*/ です", } int numget( void ){ return 100; } int main( void ){ printf("%s", Message[0]); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.4

質問に書かれえたコードを利用するのなら、こんな感じですね。 #include <stdio.h> char *Message[] = { "次のレベルアップには%d点の経験値が必要です。\n", }; int numget( void ){ return 100; } int main( void ){ printf(Message[0], numget()); return 0; }

amazontester
質問者

お礼

こんなことCでできたんですね。 こういうことがしたかったのでとても参考になりました。 本当にありがとうございます!!

その他の回答 (3)

回答No.3

> と言うことはCでそういうことはできないということですね。 char buff[256]; int exp = XXX; /* 経験値 */ sprintf(buff, "  あと %dポイントの", exp); C++なら std::ostringstream stream; stream << "  あと " << exp << "ポイントの"; std::string result = stream.str();

amazontester
質問者

補足

なるほど。参考になりました。ありがとうございます!

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

文字列の連結は Cでもできますよ ランタイムライブラリの strcatなどでつなぎます char buf[256]; char s1[] = "つぎのレベルになるには"; char s2[] = "ポイントの経験が必要じゃ"; char s3[20]; sprintf( s3, "%d", dist ); buf = strcat( s1, s3 ); // つぎのレベルになるには + dist buf = strcat( buf, s2 ); // つぎのレベルになるには + dist + ポイントの経験が必要じゃ または char buf[256]; sprintf( buf, "つぎのレベルになるには %d ポイントの経験が必要じゃ", dist ); といった具合でもいいでしょう

amazontester
質問者

お礼

すごい!ありがとうございます!! sprintfという関数は出力を対象にコピーするという関数だったんですね。 こんな便利な関数だとは知りませんでした。 後で帰宅してからじっくり使ってみようと思います。 追加で何か質問することがあるかもしれないので回答の締め切りはもう少しお待ちください。

回答No.1

> どうやら文字列に関数を埋め込んでいたみたいです。 違います。 VBには(Cにはない)型:"文字列"があり、'&' によって文字列を繋ぐことができます。 "  あと " と、関数NumberStringToWideの戻り値、そして "ポイントの" を繋いでいるだけです。 文字列中に埋め込まれているわけではありません。

amazontester
質問者

お礼

なるほど・・。ただ連結しているだけでしたか・・。 と言うことはCでそういうことはできないということですね。

amazontester
質問者

補足

そういえば、文字列と文字列の間に変数や関数の値を代入することはCでは可能なのでしょうか? たとえば int Lv = 10 "今のレベルは" "じゃ" という2つの文字列を連結させさらに間に変数Lvを差し込んで、 "今のレベルは10じゃ" という新しい文字列をCで作るのは可能ですか?

関連するQ&A