C ++ - 从const char *转换为char *的错误

时间:2018-01-17 19:21:42

标签: c++

编译类似下面的代码时遇到此错误。 我收到此错误:来自' 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;
}

1 个答案:

答案 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;
}