2016-03-14 48 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; 
    } 

這是一個不好的樣式代碼,但它顯示了點,只是傳遞它,並在方法內改變它,沒問題。