编译类似下面的代码时遇到此错误。 我收到此错误:来自' const char *'的无效转换到#char;' [-fpermissive]。
我不确定为什么strchr函数接受const char *?也许我在这里很困惑。我看过其他人在这个网站上遇到同样的错误,但我仍然没有清楚地看到解决方案。
人们提到过UNION?我不知道如何使用这个关键字,并想知道我是否可以澄清。
有人可以解释为什么会发生这种情况或解决此错误的最安全/最佳方法是什么?在同样的情况下,我的代码中的其他位置也有其他错误。
#include <strings.h>
#include <cstring>
#include <string>
#include <stdio.h>
int main()
{
validURL ('www.why_CPP_hates_me.com');
return 0;
}
bool validURL (const char *url)
{
char *q = strchr (url, '?');
...
return true;
}
答案 0 :(得分:0)
正确的方法是:
#include <cstring>
#include <string>
#include <stdio.h>
bool validURL(const char *url); // Must forward declare or prototype the
// function before calling
int main()
{
validURL("www.why_CPP_hates_me.com"); // Single quotes are for single chars
// Double quotes are for string
// literals, which create a const char*
return 0;
}
bool validURL(const char *url)
{
const char *q = strchr(url, '?'); // You have to assign to a const char*
// to maintain const correctness.
// strchr() has const char* and char*
// overloads. But you have to assign to
// the correct type.
return true;
}
或者,如果您愿意,可以这样做:
bool validURL(const char *url)
{
char *q = strchr(const_cast<char*>(url), '?');
// Casting away const is not recommended generally. Should be careful.
return true;
}