2015-10-05 170 views
-1

我給出了一個函數,它具有一個const char *作爲參數C.如何將它轉換爲常規字符*以便對其進行字符串操作?當我有以下,我得到如下:警告:初始化拋棄「常量」指針目標類型的限定詞[默認啓用]C:將常量字符串轉換爲常規字符串

char* pathname_lookup(const char* pathname) { 
    assert (pathname[0] == '/'); 
    char* path = ""; 
    strcpy(path, pathname); 
    path = path + 1; 
    return path; 
} 

如何轉換的常量字符串轉換爲字符串我可以做字符串操作?

回答

4
char* path = ""; 
strcpy(path, pathname) 

這是沒有意義的。在這裏,path指向一個常量。所以當你試圖將一個字符串複製到它中時,你試圖改變一個常數,當然,你不能這樣做,因爲根據定義,常量不能改變它們的值。

也許你想:

char *path = strdup(pathname); 
2

您的代碼被打破,它試圖進入的字符串複製到由字符串字面"",這是違法的(文字字符串是隻讀的)所佔用的空間。

您必須分配堆內存並複製那裏的字符串。

這可以用strdup()完成,這不是標準的,但很常見。

您可以重新實現它像這樣:

char * my_strdup(const char *s) 
{ 
    char *out = NULL; 
    if(s != NULL) 
    { 
    if((out = malloc(strlen(s) + 1) != NULL) 
     strcpy(out, s); 
    } 
    return out; 
} 

以上可能是微優化,但應該足以滿足大多數用途。

+0

@chqrlie *腮紅*。修正了,謝謝。 – unwind

+0

C多年來教導的一件事就是謙虛......檢查我的新問題:http://stackoverflow.com/questions/32944390/what-is-the-rationale-for-not-including-strdup-in-the- c-standard – chqrlie

+0

@chqrlie絕對。哎喲。 – unwind

相關問題