解決方法一:字符串output
永遠是空白,在其目前的形式你的代碼。這是因爲當output
作爲參數傳遞給example_method
時,它僅被複制到另一個字符串實例。 out
是取值爲output
的另一個字符串實例。換句話說,這意味着什麼,string out=output
,沒有別的。代碼行out = in;
僅將in
的值複製到out
。
So, actually the value of output is not being acted upon at all
。
爲了實現你必須通過其值by reference
或換句話說的output
值,則必須通過address of output
到example_method和該地址是將要採取的一個指針。 這種方式通過指針產生的變化也會影響example_method範圍之外的輸出字符串的值。
下面的代碼段說明我的觀點:
#include <iostream>
#include <string>
using namespace std;
void example_method(string another_string, string *pointer_to_output);
int main()
{
string input="I am a test string";
string output="";
//cout<<"Enter input string"<<endl;
//cin>>input;
example_method(input,&output);
cout<<"The result is: "<<output<<endl;
return 0;
}
void example_method(string another_string, string *pointer_to_output)
{
*pointer_to_output=another_string;
}
解決方法二: 爲什麼不能簡單地改變example_method
從void
的return type
到std::string
?通過這種方法void example_method(string in, string out);
更改爲string example_method(string in, string out);
上面的main聲明。 並且返回的輸出字符串在屏幕上使用cout<<example_method(input, output);
放出,這樣您可以簡單地使用cout
將輸出返回到屏幕。
這樣你的代碼工作,它實現你正在嘗試做的事情,並沒有真正的需要使用指針。
修改後的代碼:
#include <string>
using namespace std;
string example_method(string in, string out);
int main(){
string input;
string output;
cin >> input;
cout<<example_method(input, output);
// cout << "The result is: " << output << endl;
return 0;
}
string example_method(string in, string out){
out = in;
return out;
}
希望這有助於!
我試了一下,就像你寫它segfaulted。 –
我將如何分配值而不是參考值? –
-1:輸出未初始化,並且引用將是可取的。這是給起始C++程序員的糟糕示例代碼。 – Sjoerd