这是我的问题。
我有一个定期修改 char* 的类。
还有另一个类,需要能够读取这个值。所以我想将 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 *?