将指针传递给函数,然后将其放入另一个函数中

时间:2016-07-18 19:32:15

标签: c++

我正在编写一个可以读写文件的密码生成器。我有一个函数,它接受一个空字符串,然后修改它。该函数看起来像这样:

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_string<char>**转换为std::basic_string<char>*

我对C ++比较陌生,这个程序只是为了帮助我熟悉这门语言。我可以将passwd传递给write_out()函数而不使用*&来表示指针或引用就好了。如果我输入:

,它不会给我一个错误
*passwd = "something";
write_out(passwd);

它不会影响程序的整体完成,我只是好奇为什么我会收到错误。

4 个答案:

答案 0 :(得分:2)

变量 <li uib-dropdown is-open="status.isopen" ng-mouseover="status.isopen = true" ng-mouseleave="status.isopen = false"> <a ui-sref="abc">ABC</a> <ul uib-dropdown-menu role="menu"> <li role="menuitem"><a ui-sref="def">DEF</a></li> </ul> </li> 已经是指向passwd的指针,因此通过std::string获取地址会为您提供&passwd类型的内容 - 所以如果{{}期望一个std::string**类型的参数但接收write_out然后编译器会给你一个错误,如你所见。因此,在将std::string*传递给std::string**时请勿使用&

passwd

但除此之外,您应该通过引用而不是指针传递write_out()变量,如评论和其他答案所述。

答案 1 :(得分:0)

不要使用指针,在c ++中更喜欢使用pass by reference:

void password_create(std::string &passwd) {
    passwrd = "something";
    ...

然后确保按照您的意图创建字符串:

std::string myString;
password_create(myString);

这样你将拥有你期望的内存,你不必担心指针语义。

答案 2 :(得分:0)

无需过度复杂化。我根本不知道在这种情况下需要指针的位置。只需创建一个函数来生成密码并将其返回。

#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;
}

答案 3 :(得分:0)

正如其他答案中所提到的,你应该通过引用而不是指针来获取std::string参数。

假设write_out()有一些像

这样的签名
write_out(char* passwd);

write_out(const char* passwd);

你可以通过std::string::operator[]()

void password_create(string *passwd) {
    *passwd = "something";
    write_out(&(*passwd)[0]);
}