我必須定義一個接口。我的作業中的API如下所示:用於存儲值的函數參數
int generate_codes(char * ssn, char * student_id);
int表示0或1表示合格或不合格。 studentid是一個輸出參數應該返回一個6位數的ID。 ssn是一個9位輸入參數
他們的學校計劃將採取ssn的和使用我的代碼來生成學生ID。
- 現在從API的角度來看,我不應該使用const char *作爲這兩個參數。
- 學生是否應該通過參考傳遞?而不是通過指針?
- 有人可以告訴我如何可以輕鬆地在我的測試應用程序中使用指針,它使用我的api獲取指針,以便它從char *打印std :: string?
我的應用程序的代碼看起來像
const char * ssn = "987098765"
const char * studnt_id = new char [7];
int value = -1;
value = generate_codes(ssn,studnt_id);
std::string test(studnt_id);
std::cout<<"student id= "<<test<<" Pass/fail= "<<value<<std::endl;
delete [] studnt_id;
return 0;
我基本上得到一個錯誤約< <不是與操作數的右側兼容。當我將代碼更改爲
std::cout<<"student id= "<<test.c_str()<<" Pass/fail= "<<value<<std::endl;
然後它的工作,但我得到垃圾的價值。不知道如何從指針獲取值。該函數內的值打印得很好。但是當我嘗試在打印垃圾的功能之外打印它時。裏面的上述功能,我設置了類似這樣
std::string str_studnt_id = studnt_id;
這是一個字符串參數去我的,做的代碼生成真正的功能可按studndt_id。 當我準備的代碼,並想退貨我這樣做:
studnt_id = str_studnt_id.c_str();
應該是使str_studnt點的地址studnt_id的地址,因此任何改變我做的值,其指向它應該反映在外面的功能?這個API使用char *,但我的函數使用std :: string。
該API指定的char *隱而不宣的事實你的意思是你不能改變那個界面。只是建議改變它。這避免了你必須包裝它,併爲非常簡單的事情創造不必要的複雜性。 – 2010-04-04 08:55:39