2012-03-14 49 views
1

直入業務:我一直在尋找的代碼大致是這樣的:如何連接常量字符數組和char數組指針?

char* assemble(int param) 
{ 
    char* result = "Foo" << doSomething(param) << "bar"; 
    return result; 
} 

現在我得到的是:

​​

編輯: doSomething返回char*

那麼,如何連接這兩個?

附加信息:
編譯:G ++ 4.4.5在GNU/Linux 2.6.32-5-amd64的

+0

請注意,<< <<從左到右,而不是從右到左。所以當你看到'std :: cout << a << b << c'時,並不意味着「連接a,b和c並將結果寫入'std :: cout'」,並且'< <'不是連接運算符。它意味着'(((std :: cout << a)<< b)<< c)',即「依次將a,b和c寫入'std :: cout'」。流的'operator <<'返回流本身,正是爲了支持這個鏈接。 – 2012-03-14 11:32:15

回答

2

"Foo""Bar"是文字,它們沒有插入(<<)運算符。

如果你想要做的基本串聯

你,而不是需要使用std::string

std::string assemble(int param) 
{ 
    std::string s = "Foo"; 
    s += doSomething(param); //assumes doSomething returns char* or std::string 
    s += "bar"; 
    return s; 
} 
+1

這是未定義的行爲,您正在將**引用**返回給臨時對象。該字符串將在return語句後立即銷燬,並且您將留下一個懸掛參考 – 2012-03-14 11:56:40

+0

@DavidRodríguez-dribeas:fixed :) – Necrolis 2012-03-14 12:04:34

3

嘛,你使用C++,所以你應該使用std::stringstream

std::string assemble(int param) 
{ 
    std::stringstream ss; 
    ss << "Foo" << doSomething(param) << "bar"; 
    return ss.str(); 
}; // eo assemble 
1

"Foo""bar"有型char const[4]。從錯誤消息 我收集的表達式doSomething(param)char* (這是可疑的—有一個情況下 功能可以合理返回char*真的很特別)。這些類型中沒有一個支持 <<

你在這裏處理C風格的字符串,它不支持 串聯(至少不合理)。在C++中,對字符串拼接 運營商+,不<<,你需要C++字符串爲它 工作:

std::string result = std::string("Foo") + doSomething(param) + "bar"; 

(一旦第一個參數是一個std::string,隱式轉換會 春天生效至轉換其他)。

但我會看看doSomething函數。有一個錯誤 與函數返回char*