2014-04-21 23 views
1

我有以下非常簡單的程序。將字符指針傳遞給另一個函數:空白值。 C++

int modify(char * v){ 
    v = "123" ; 

    return 0; 
} 

int main (int argc, char** argv){ 
char *test = new char[10]; 
    modify(test); 
    std::cout << test; 
    return 0; 

} 

我知道我可以只打印出「123」,但我特意寫這種方式瞭解指針如何工作。但是,「123」未打印。我應該如何正確傳遞指針?

回答

7

你必須記住,在C++參數默認情況下,通過值傳遞,這意味着在函數中你有副本,修改副本不會改變原來的。

如果你想改變指針指向別的東西,你需要通過來引用。但是,在這種情況下,它會導致其他問題,因爲您然後鬆開原始指針。

因此,解決方法是使用std::string按引用傳遞,或通過使用strcpy頂部複製到目標存儲區(但如果你使用strcpy你必須照顧到不寫入超出分配的內存)。

3

試試這個裏面修改strcpy(v, "123")

1

有幾個問題與您的代碼。

modify()功能其實改變不了什麼:

int modify(char * v) { 
    v = "123"; // overwrites the parameter value copy on the stack 
      // with a char[] literal pointer 
    return 0; 
} 

您需要從字面複製到指針:

int modify(char* v) { 
    strcpy(v,"123"); 
    return 0; 
} 

你不釋放分配的內存,這可能會導致內存泄漏在其他情況下

int main (int argc, char** argv){ 
char *test = new char[10]; 
    modify(test); 
    std::cout << test; 
    delete [] char; // <<< Note 
    return 0;  
} 

正如Joachim Pileborg alread y提到最適合C++的解決方案是使用std::string而不是char*