2012-05-07 6 views
2

利用可能な変数を使用して 'const char *'を作成する最良の方法は何ですか?例えば、ある関数はファイルを見つけるためのパラメータとしてconst char *を必要とする。すなわち、 "invader1.png"である。私が5種類の侵略画像を持っている場合、どうすれば1:5から反復することができますか? "Invader1.png" .. "Invader2.png..etc etc "侵入者 "+%d +" .png "を手に入れますintを使用してconst char *を作成する

私はsprintfのを試してみましたが、キャストが、無駄に

私は私の説明は理にかなって願って、コードと感謝

更新:。

for (int y=0; y<250; y+=50){ 
      stringstream ss; 
      ss << "invader" << (y/50) << ".png"; 
      const char* rr = ss.str().c_str(); 
      printf("%s", rr); 
      for (int x=0; x<550;x+=50){ 
       Invader inv(rr, x+50, y+550, 15, 15, 1, false, (y/50 + 50)); 
       invaders[i] = inv; 
       i++; 
      } 
     } 
+2

。 –

答えて

3

使用std::stringstream。このような何か:

std::stringstream ss; 
ss << "invader" << my_int << ".png"; 
my_func(ss.str().c_str()); 
+0

ありがとう、それは理にかなっていますが、まだ問題があります。デバッグするとき、rrの値は "0x0040f6a8"であり、私のwoglベースのプログラムは実行されません。 Heres私のコード: – Milk

+1

[std :: to_string](http://en.cppreference.com/w/cpp/string/basic_string/to_string)を忘れないでください。 –

+0

回答にコードタグを使用する方法が分かりませんので、OP – Milk

1

あなたがC++を使っているので、あなたは、単にstd::stringを使用して、あなたが関数に渡すことができますconst char*を取得するためにc_str()機能を使用することができます。このような文字列を構築するための1つの簡単な方法は、<sstream>からstd::ostringstreamを使用することです:

for (int i = 1; i <= 5; ++i) { 
    std::ostringstream ss; 
    ss << "invader" << i << ".png"; 
    foo(ss.str().c_str()); // where foo is the specified function 
} 

あなたはまた、sprintfの()と文字配列を使用することができますが、その後、あなたは、バッファの大きさのようなものに注意を払う必要があります。完全を期すために、ここではsprintfと同じことを行う方法ですが、私はあなたがより多くのC++でstd::stringアプローチ、一緒に行くお勧め - のように:あなたは本当にあなたのコードが表示されるはずです

for (int i = 1; i <= 5; ++i) { 
    char buf[13]; // big enough to hold the wanted string 
    std::ostringstream ss; 
    sprintf(buf, "invader%d.png", i); 
    foo(buf); // where foo is the specified function 
} 
関連する問題