我必须定义一个接口。我的作业中的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