C++ 获取传递给函数的指针,然后将其放入另一个函数中
我正在写一个可以读写文件的密码生成器。我有一个函数,它接受一个空字符串,然后修改它。该函数将如下所示:C++ 获取传递给函数的指针,然后将其放入另一个函数中,c++,C++,我正在写一个可以读写文件的密码生成器。我有一个函数,它接受一个空字符串,然后修改它。该函数将如下所示: void password_create(string *passwd) void write_out(string file_name, string *passwd) void password_create(string *passwd) { *passwd = "something"; write_out(&passwd); } 在该函数中,我调用了一个w
void password_create(string *passwd)
void write_out(string file_name, string *passwd)
void password_create(string *passwd) {
*passwd = "something";
write_out(&passwd);
}
在该函数中,我调用了一个write函数,该函数使用密码将数据写入到一个文件中,它看起来像这样:
void password_create(string *passwd)
void write_out(string file_name, string *passwd)
void password_create(string *passwd) {
*passwd = "something";
write_out(&passwd);
}
然后整个代码如下所示:
void password_create(string *passwd)
void write_out(string file_name, string *passwd)
void password_create(string *passwd) {
*passwd = "something";
write_out(&passwd);
}
编译程序抱怨我无法将std::basic\u字符串**
转换为std::basic\u字符串*
我对C++比较陌生,这个程序只是为了帮助我熟悉语言。我可以将passwd
传递到write_out()
函数中,而不需要*
或&
来表示指针或引用。如果我键入以下内容,则不会出现错误:
*passwd = "something";
write_out(passwd);
<>这不影响程序的全部完成,我只是好奇为什么我会得到那个错误。 < P>不要使用指针,C++中更喜欢用PASS引用:
void password_create(std::string &passwd) {
passwrd = "something";
...
然后确保按照您的意愿创建字符串:
std::string myString;
password_create(myString);
这样,您将拥有预期的内存,并且不需要担心指针语义 变量
passwd
已经是指向std::string
的指针,因此,通过&passwd
获取它的地址将为您提供某种类型的std::string**
——因此,如果write\u out
需要一个类型为std::string*
的参数,但收到std::string**
,那么编译器将给您一个错误,正如您所看到的那样。因此,在将passwd
传递到write out()时,不要使用&
:
但除此之外,您应该通过引用而不是指针传递std::string
变量,如注释和其他答案中所述。无需过度复杂。我根本看不出在这种情况下哪里需要指针。只需创建一个函数来生成密码并返回它
#include <string>
#include <fstream>
using namespace std;
string password_create() {
return "generated password";
}
void write_password_to_file(string file, string password) {
ofstream stream(file);
stream << password;
stream.close();
}
int main() {
auto password = password_create();
write_password_to_file("pathtofile.txt", password);
return 0;
}
#包括
#包括
使用名称空间std;
字符串密码_create(){
返回“生成密码”;
}
无效将\u密码\u写入\u文件(字符串文件,字符串密码){
流(文件);
stream如其他答案中所述,您实际上应该通过引用而不是指针获取std::string
参数
假设write_out()
有如下签名
write_out(char* passwd);
或
你可以通过:
太长了,读不下去了。为什么要用一个指针来写代码?>:ST::String 。std::string::operator[]
,例如:write_out(passwd.c_str());