我正在编写一个可以读写文件的密码生成器。我有一个函数,它接受一个空字符串,然后修改它。该函数看起来像这样:
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);
它不会影响程序的整体完成,我只是好奇为什么我会收到错误。
答案 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]);
}