2012-03-04 179 views
3
int A(const char* name){  
    name = "Here you GO!";  
    char* new_name;  
    //strcpy(new_name,name);  
    new_name = const_cast<char *>(name);  
    printf("%s\n", new_name);  
    return 0;  
} 

這是我正在測試的源代碼。將const char *轉換爲char *的問題

一個問題是當我使用const_cast<char *>時,它說它是未聲明的。 (我知道它可以在'g ++'編譯中工作) 另一個問題是當我嘗試使用strcpy將它們組合在一起時,它彈出分段錯誤。 的前提是我必須用gcc whatevername.c -std=c99來編譯。

有人提出了一些建議如何解決這個問題。非常感謝..

+0

如果你看到'的const_cast ''下工作摹++,但不是在'gcc'的C編譯器的一部分,你有什麼樣的證據,這是C++和不是C ... – glglgl 2015-01-06 08:23:08

回答

7

您需要爲新字符串分配空間。你在正確的軌道上使用strcpy,因爲const_cast只是C++。編輯:更好地使用strdup作爲米羅斯拉夫建議。

int A(const char* name) 
{ 
    name = "Here you GO!"; 
    char* new_name = malloc(strlen(name)+1); 
    if (new_name) { 
     strcpy(new_name,name); 
     printf("%s\n", new_name); 
    } 
    return 0; 
] 
4

const_cast是一個C++的東西;它不存在於C中。

如果要使用strcpy,則不能只使用未初始化的指針(即new_name)。首先需要分配足夠的空間(使用malloc),然後使用free完成該空間。

1

您尚未爲new_name分配空間。足夠分配以保存要複製的字符串。

7

您正在收到分段錯誤,因爲new_name指向無處。

解決方案:爲new_name分配內存。您可以調用malloc(),然後使用的strcpy(),或調用的strdup(),它會爲你做兩件事:

int A(const char* name){ 
    name = "Here you GO!"; 

    char* new_name = strdup(name); 

    printf("%s\n", new_name); 
    return 0; 
} 

看到這個答案的更多詳細信息的strdup():https://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c

+1

'strdup'並不總是存在... – 2012-03-04 17:48:56