C函数代码转换为C++类方法

C函数代码转换为C++类方法,c++,c,C++,C,您好,我正在尝试从C转换此函数,该函数提示用户输入名字和姓氏,并在输出参数中返回名字和姓氏 //the C codes is this: void getPatronName(char *fn, char *ln) { printf("\n Enter patron name ([first] [last]): "); scanf("%s %s", fn, ln); } //will it be equivalent to doing this in C++? :

您好,我正在尝试从C转换此函数,该函数提示用户输入名字和姓氏,并在输出参数中返回名字和姓氏

//the C codes is this:
void getPatronName(char *fn, char *ln) {
  printf("\n        Enter patron name ([first] [last]):  ");
  scanf("%s %s", fn, ln);
}

 //will it be equivalent to doing this in C++? :
 void MenUI::getPatronName(string *fn, string *ln) {
   cout<<endl<<"   Enter patron name ([first] [last]): ";
   cin>>*fn>>*ln;
 }
谢谢,换衣服

cin<<fn<<ln;
您需要取消对指针的引用并更改运算符的方向。

//C代码如下:

void getPatronName(char *fn, char *ln) {
  printf("\n        Enter patron name ([first] [last]):  ");
  scanf("%s %s", fn, ln);
}

 //will it be equivalent to doing this in C++? :
 void MenUI::getPatronName(string* fn, string* ln) {
   cout<<endl<<"   Enter patron name ([first] [last]: ";
   cin>>*fn;
   cin>>*ln;
 }

使用>>运算符并更改指向引用的指针

void MenUI::getPatronName(string& fn, string& ln) {
    cout<<endl<<"   Enter patron name ([first] [last]: ";
    cin>>fn>>ln;
}

当你从C转换为C++时,你应该考虑的一件事是看你是否能比C等价物做得更安全。 看看原始的C代码:

这里的问题是,这个函数不知道fn或ln是否分配了适当的空间,或者即使它们可以有效写入指向可修改缓冲区的指针。所以这个函数很容易崩溃

<> P>一个减轻这些问题的C++翻译是:

 #include <iostream>
 #include <string>

 using namespace std;
 //...
 void getPatronName(string& fn, string& ln) {
   cout << "\n   Enter patron name ([first] [last]: ";
   cin >> fn >> ln;
 }

为什么这样更安全?首先,必须向函数传递有效的std::string。除非您进行某种真正的黑客操作,传递一个无效的std::字符串,否则是不可能的。第二件事是fn和ln将允许输入任意大小的字符串数据。因此,缓冲区覆盖的可能性为0。

代码是否有效?问题是什么?为什么浪费时间把不安全的C代码转换成不安全的C++代码?去掉指针。是的,它将以类似的方式工作。但是您的“问题”是什么?+1,尽管问题的编码有两个挑剔之处-没有理由使用endl而不是\n在读取cin之前刷新输出,因为它们是绑定流,所以额外刷新只会减慢速度。另外,最好将返回类型设为bool和return cin>>fn>>ln;因此,调用者可以测试输入是否可用。。。。
void getPatronName(char *fn, char *ln) {
  printf("\n        Enter patron name ([first] [last]):  ");
  scanf("%s %s", fn, ln);
}
 #include <iostream>
 #include <string>

 using namespace std;
 //...
 void getPatronName(string& fn, string& ln) {
   cout << "\n   Enter patron name ([first] [last]: ";
   cin >> fn >> ln;
 }