C++中的字符串类型

cbeh67ev  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(104)

我目前有一个在头中定义的函数,看起来像这样

void foo::GetValue(std::string& str);

字符串
这个函数基本上给str赋值。我需要想出一个str的替代方案(基本上,没有使用标准库的东西)。
以上函数的实现方式如下:

void foo::GetValue(std::string& str)
{
    std::string s = bar.someMethod();
    str = s;
}


我想知道什么是最好的/最简单的替换头?
我的一个方法是用char*替换头文件中的std::string,这样我就可以在头文件中看到这个:

void foo::GetValue(char* str);


在实现中,我会有这样的:

void foo::GetValue(char* str)
{
    std::string resp = bar.someMethod();
    char* c = new char[resp.size() + 1];
    std::copy(resp.begin(), resp.end(), c);
    c[resp.size()] = '\0';
}


上述方法的问题是,很多文件都在调用这个函数,它们需要修改代码。此外,他们还需要释放上述内存。对此我有两个顾虑,那就是这个函数的其他调用者需要做以下两件事
1.将传递给函数的std::string替换为char*
1.使用完char*后释放它。
这两个项目对我来说似乎非常昂贵,相信其他来电者做。
我能做些什么来解决这个问题有什么建议吗?也许把签名换成别的?我希望调用者仍然传递字符串,但是string.c_str()是常量char指针。

9ceoxa92

9ceoxa921#

对于这样一个给定的C++函数:

std::string foo::GetValue(std::string& str)
{
  return bar.someMethod(str);
}

字符串
那么你的等效C代码看起来像这样:

void foo_GetValue(char* str, char* res, size_t size)
{
  std::string str_arg = str;
  std::string result = bar.someMethod(str_arg);
  strncpy(res, result.c_str(), size - 1);
  res[size-1] = 0; // Ensure is NUL terminated
}


从C呼叫时:

void example() {
  const BUFFER_LEN = 1024;
  char buffer[BUFFER_LEN];

  foo_GetValue("example", buffer, BUFFER_LEN);
}

相关问题