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());