2016-03-14 175 views
-1

我有一个const char* const,我需要将它传递给一个方法,该方法需要const char*。我怎么做?。如何将const char * const转换为const char *

此外,还有一个接受const char **的API。在这种情况下如何改变?我试图

为const char * const的ABC =“东西; otherAPIThatExpectsConstCharStarStar(&的const_cast(ABC))

但在linnux这与& '操作' '需要作为左值' 未能

+0

使用const_cast:http://en.cppreference.com/w/cpp/language/const_cast –

+0

你最好不要 – Drop

+7

[嗯...只是通过它](http://ideone.com/VNHzdU) ?? – WhozCraig

回答

-1
#include <iostream> 
#include <string> 

std::void setString(const char *p) { 
    std::cout << p << std::endl; 

} 

int main() { 
    const char* const cStr ="hello"; 
    setString(cStr); 
} 
+1

尽管这段代码可能会回答这个问题,但最好包含一些_context_,解释_how_它的工作原理和_when_使用它。从长远来看,仅有代码的答案是没有用的。 –

+0

@BenjaminW。 : 可以的!我下次会照顾这个。 –

6

你不需要,最后一个const标识了包含字符串的变量的类型,这意味着你不能修改变量,但是你可以自由地将它赋值给其他变量或者作为参数传递,不再需要不断变化。

+0

有一个接受const char **的API。在这种情况下如何改变?我试过&const_cast (myConstCharPointer)。但是在linnux上,这是''所需的'值'和'运算符'的失败。 – Pavan

+0

@Pavan:然后将它复制到临时变量'const char * var2 = original'并将参数作为'&var2'传递。我假设API是以这种方式设计的,它可能会将该值分配给该变量。用const_cast强制它可能会轻易地破坏这些东西,因为它会覆盖应该是常量的东西,甚至可能位于只读内存中。 –

-3

Supoose你有以下变量p

const char* const p = "test"; 

现在这个pp传递给您所呼叫

const char* pp = std::const_cast<const char*>(p); 
+0

可能想解释为什么需要[因为它不是]](http://ideone.com/VNHzdU)。不,我没有投下赞成票。 – WhozCraig

0

你真的不需要,你可以看到的功能,当你给一个方法的参数,方法会创建一个参数的副本,所以在方法内部,它只能改变副本,而不是原来的副本,除非你传递一个引用地址,所以,现在你有一个指针,它不能改变,没关系,只是通过它就像我所说的那样,这个方法不会改变。

#include<iostream> 
    using namespace std; 
    void fun(const char *p) 
    { 
     char tt[10]="dsds"; 
     p=tt; 
     cout<<"inside_fun"<<endl; 

    } 

    int main() 
    { 
     int i; 
     char here[10]="212121"; 
     const char * const pp=here; 
     fun(pp); 
     cout<<pp<<endl; 
    } 

这是一个不好的样式代码,但它显示了点,只是传递它,并在方法内改变它,没问题。