2014-07-09 35 views
-1

我正在努力通過函數傳遞參數的C++!如何將Cstring參數值複製到C++函數中的本地cstring中?

假設下面的函數聲明:

void functionname (char * myvar) { 

    char * ptf; 
    ptf = strtok(myvar,"="); 

} 

CString的MYVAR通過引用傳遞如對於在C++函數傳遞的任何陣列的情況下,是嗎?

但是如何使本地副本的myvar變量,那我的我的功能修改?

問題是,使用語句「ptf = strtok(myvar,」=「);」修改myvar!

+2

用'myvar'指向'std :: string local_string(myvar);'的第一個元素的數組來初始化'std :: string'。 – Mankarse

+0

問題是strtok的第一個參數必須是char *! –

回答

-1

cstring myvar通過引用傳遞,就像傳遞給C++函數的任何數組一樣,對吧?

不是。在這種情況下,它通過有價值的傳遞。

但如何製作一個myvar變量的本地副本,我的我在函數中修改?

void functionname (char * myvar) { 

    std::string::size_type len = strlen(myvar); 
    char *temp = new char[len+1]; 
    strcpy(temp, myvar); 
    temp = strtok(temp, "="); 
    //.... 
} 
+0

@Mankarse;是的,頭是對的。我忘了那個。 – haccks

+0

@Mankarse除了引用OP的內容外,我看不到任何他提到的數組。 – mr5

+0

我想我必須返回到C++的函數,指針和字符串的基礎知識!感謝所有的答案! –

1

您首先需要弄清楚你的意思。

當您說myvar被「通過引用」傳遞時,您使用的是C術語。對於字符數組,您正在使用參考語義,是的,但是您沒有通過引用傳遞。在C++中,我們使用了引用類型,我們使用短語「通過引用傳遞」。在這裏你有一個指針類型。您正在按值傳遞指針。

現在您問「我如何製作myvar的本地副本?」如果我從字面上理解你的問題,那麼它是做簡單:

char* anothervar = myvar; 

我有myvar值複製到anothervar。但是,他們仍然指向相同的角色。

如果您想將字符串的內容複製到另一個數組中,則需要使用類似strcpy的內容並執行一些動態分配,但這是非常差的C++風格。相反,你應該始終使用std::string。你的功能變得簡單了很多正是這種時候:

void functionname(std::string myvar) { 
    std::string anothervar = myvar; 
} 

(雖然沒有很好的理由,複製從myvar以來myvaranothervar已經是字符串的副本被傳遞給它)

我寫的最近一篇關於avoiding raw pointers的文章,其中一個章節涵蓋了C風格的字符串以及爲什麼std::string更好。

+0

在函數functionname中,我使用strtok函數,它需要一個char *作爲它的第一個參數,所以使用std :: string不是一個選項! –

+0

我會建議使用C++字符串解析工具,而不是'strtok'。你怎麼做取決於你在做什麼。你可以用'std :: istringstream'來做你想做的事情。 –

+0

切換到std :: string庫工具! –