提示コードですが////コメント部のコードですがどうすればstd::vector<const char*>型変数に文字列を代入出来るのでしょうか?
色々試しましたがわかりません。
cpp
1#include "Game_Scene.hpp" 2#include "Stage.hpp" 3#include "Control.hpp" 4 5#include <filesystem> 6#include <map> 7 8namespace fs = std::filesystem; 9 10//コンストラクタ 11Game_Scene::Game_Scene(Scene_Type t, Entry* e) : Scene_base(t, e) 12{ 13 Owner = e; //Entry クラス 14 15 16 // ##### スプライトをロード ##### 17 std::vector<int> SpriteList; //スプライトリスト 18 std::vector<const char*> NameList; //スプライトリスト 19 20 21 char current[200]; 22 strcpy_s(current,sizeof(current),fs::current_path().string().c_str()); 23 strcat_s(current,sizeof(current), "/Sprite_Data/"); 24 25 //スプライト読み込み 26 printf("Path : %s\n",current ); 27 for (fs::directory_iterator itr = fs::directory_iterator(current); itr != fs::directory_iterator(); itr++) 28 { 29 printf("%s\n",itr->path().string().c_str()); 30 31 SpriteList.push_back(Owner->LoadSprite(itr->path().string().c_str())); //スプライト 32 //NameList.push_back(); //名前 33/////////////////////////////////////////////////////////////////////////////////////////////////////////// 34 strcpy_s(NameList.back(), sizeof(itr->path().filename().string().c_str()), itr->path().filename().string().c_str()); 35/////////////////////////////////////////////////////////////////////////////////////////////////////////// 36// NameList.push_back(itr->path().filename().string().c_str()); //名前 37 } 38 39 40 41 42 // ##### コンポーネント ##### 43 stage = std::make_shared<Stage>(Owner,SpriteList); //マップ描画 44 control = std::make_shared<Control>(Owner,SpriteList,NameList); //操作 45 46 47 48}
(std::vector< std::string > 等ではなく,あえて std::vector< const char* > とする意図が不明ですが)
vectorの要素と成る個々の const char * が指す領域をどのように確保するつもりなのか?という考えを示す必要があるでしょう.
そこがわからないのですがどうすればconst char*で出来るのでしょうか?
どうしてconst char *でやらなければならないのでしょうか?
なんとなく挑戦したいので
(文字列リテラル専用で運用するのでなければ)動的に個数の変わるvectorと、生のchar*の相性は最悪です。
「なんとなく」ぐらいで、明確にその構造を取るべき理由がないのであれば、やめておくことを強くおすすめします。
> なんとなく挑戦したい
そういうことは,それだけを試してみる用の小さなテストプログラムとかの上でやってみれば良いことなのではないでしょうか.
「const char* で自前で頑張るとしたら,どういうことになるのか」を知っておくのは良いことかもしれませんが,それを本物のプログラム(?)で使い続ける必要はない.
「色々試しましたが」からは何の情報も得られません。
回答1件
あなたの回答
tips
プレビュー