ここに私の問題があります。
char* を定期的に変更するクラスがあります。
この値を読み取ることができる必要がある別のクラスがあります。したがって、必要に応じて値をチェックできるように、この 2 番目のクラスのコンストラクターに char* を渡したいと思います。
別のパラメーターの実装の例を挙げましょう。これはブール型です。
クラスA:
bool f_valid = false; // global
m_eventCatcher.addProxy(porting::shared_ptr<CallbackProxy>(new handleCall(&f_valid)));
クラス B では:
struct handleCall
{
bool* m_dataValid;
handleCall(bool* result)
{
// saving the pointer to the boolean that I want to change
m_dataValid = result;
}
method()
{
if (smth)
{
(*m_dataValid) = false;
}
}
};
これまでのところうまくいっています - これはうまくいくようです。どちらのクラスも、このブール値を変更してアクセスできます。
ここで、char* を使用して同じことを行う必要があります (文字列を使用できないため、URL アドレスなどの短いテキストを保存するには、これが最善の方法だと思いますか?)。
だからここに私が書いたものがあります:
クラスA:
const char* f_url = "blah blah"; // global
m_eventCatcher.addProxy(porting::shared_ptr<CallbackProxy>(new handleCall2(&f_url)));
クラスC:
struct handleCall2
{
char ** m_url;
handleCall2(char** url)
{
// saving the pointer to the char*
m_url= url;
std::cout << (*m_url) << std::endl; // prints out url fine
}
method()
{
std::cout << (*m_url) << std::endl; // by this time the value has been changed by ClassA, and I print out some rubbish - symbols, squares, etc.
}
};
問題は、文字列が変更され、そのアドレスも変更されたためだと思いますか? 私は本当に混乱しています - 誰かが何が起こっているのか教えてもらえますか? この状況で私は何をすべきですか?
アップデート:
問題はchar *を変更する方法にあるようです:
f_url = "new text"; // works fine
f_url = fileUrl.c_str(); // doesn't work! I get rubbish in the value when I try to access it from ClassB
strcpy(m_url, fileUrl.c_str()); // I also removed const from the variable and tried this - got a crash "access violation using location" :(
文字列の値を char * に書き込む他の方法はありますか?