【发布时间】:2013-08-09 11:13:45
【问题描述】:
这是我的问题。
我有一个定期修改 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 * 吗?
【问题讨论】:
-
哦,还有一件事:
std::string在处理字符串方面比原始指针要好得多。 -
“现在我需要对
char*做同样的事情(我不能使用字符串,[...])。” .但是,我想知道为什么你不能使用std::string。 -
您使用的 C++ 编译器 不是 会向您发出关于发送地址
const char *并将其存储在char **中的警告/错误??跨度> -
如果你不能使用
std::string,那么std::vector呢?是的,一个向量完全能够保存一个字符串,它只是不能轻松地进行“字符串”操作,但仍然可能比原始指针更好。 -
在 C++ 中,结构是成员默认公开的类。
标签: c++ c pointers char-pointer