如何通过函数分配std :: string?

时间:2015-06-07 01:19:08

标签: c++

那么,我如何通过函数分配std :: string?

我有这个代码

void WP_Hash(std::string dest, std::string src)
{
// Set up all the locals
struct NESSIEstruct
    whirlpool_ctx;

char
    digest[64],
    buffer[4100];

unsigned char
    *tmp = (unsigned char *)digest;

// Start the hashing
NESSIEinit(&whirlpool_ctx);

NESSIEadd((const unsigned char *)src.c_str(), src.length() * 8, &whirlpool_ctx);

// Finish the hashing
NESSIEfinalize(&whirlpool_ctx, tmp);

// Convert to a real string
unsigned int len = 0;
while (len< 128)
{
    buffer[len++] = gch[*tmp >> 4];
    buffer[len++] = gch[*tmp & 0x0F];
    tmp++;
}
buffer[128] = 0;

dest.assign(buffer);
}

和这段代码来初始化它:

    std::string ret;
    WP_Hash(ret, "none");
    sampgdk::logprintf("%s", ret.c_str()); 

它什么都不打印

当我将ret字符串更改为&#34; a&#34;时,它会打印&#34; a&#34; 我希望它打印无(在WP_Hash中哈希但忽略它,让我们说&#34;没有&#34;是WP_Hash的结果)

我该怎么办?

2 个答案:

答案 0 :(得分:3)

C ++不是Java:它的对象具有值语义。因此,您将副本传递给该函数。

如果您希望原始参数保留函数内的更改,则传递引用。 (同样值得传递一个(constsrc的引用来节省不必要的复制。)

   void WP_Hash(std::string& dest, const std::string& src);
//                         ^       ^^^^^^           ^

或者,return来自函数的结果字符串:

   std::string WP_Hash(const std::string& src);
// ^^^^^^^^^^^         ^^^^^^           ^

然后使用:

const std::string ret = WP_Hash("none");
sampgdk::logprintf("%s", ret.c_str());

答案 1 :(得分:0)

与任何其他C ++类型相同 - 除非另有说明,否则按值传递。添加&以使其成为参考。或者只是回来。

相关问题