C++;如何在getter函数中返回*char/char[]? 我试图用一个GETter函数在C++中返回一个字符数组。这是学术性的,我们需要使用char[]/char*,然后返回它,这样我们就可以cout将数组发送到控制台 char* Groceries:: getList() const // Returns the list member. { return list; }

C++;如何在getter函数中返回*char/char[]? 我试图用一个GETter函数在C++中返回一个字符数组。这是学术性的,我们需要使用char[]/char*,然后返回它,这样我们就可以cout将数组发送到控制台 char* Groceries:: getList() const // Returns the list member. { return list; },c++,arrays,char,C++,Arrays,Char,我还尝试在该函数中使用strcpy。当我使用类似于:“am”的cout时,这两种方法都返回似乎是内存位置的内容♥”。如果我尝试执行:cout如果绝对需要使用C样式的数组和指针,则需要使用new,最好是智能指针: std::unique_ptr<char[]> getList() const { const char *someCString = // whatever char *p = new char[strlen(someCString) + 1]; s

我还尝试在该函数中使用strcpy。当我使用类似于:“
am”的
cout
时,这两种方法都返回似乎是内存位置的内容♥”。如果我尝试执行:
cout如果绝对需要使用C样式的数组和指针,则需要使用
new
,最好是智能指针:

std::unique_ptr<char[]> getList() const {
    const char *someCString = // whatever
    char *p = new char[strlen(someCString) + 1];
    strcpy(p, someCString);
    return std::unique_ptr<char[]>(p);
}
std::unique\ptr getList()常量{
const char*someCString=//随便什么
char*p=新字符[strlen(someCString)+1];
strcpy(p,someCString);
返回std::unique_ptr(p);
}
在呼叫者中:

auto p = object.getList();
std::cout << p.get() << "\n";
auto p=object.getList();

std::cout这里是一个返回C样式字符串的函数和打印它的主函数的示例

#include <stdio>

char * a_function(void)
{
  static const char my_test[] = "Propane explodes.\n";
  return &my_test[0]; // It's a MISRA thing.
}

int main(void)
{
  char * p_text = 0;
  p_text = a_function();
  std::cout << Here's the text: "
            << p_text;
  std::cout.flush(); // Just to be sure.
  return 0;
}

虽然函数定义的返回类型可以定义为
const char*

问题是存储在列表中或由列表指向的字符串不是以零结尾的,它似乎包含一些垃圾

因此,在修改列表的位置搜索错误

还有你的问题

如何返回C++中的字符,打印出来,不返回 内存地址


这是矛盾的。如果列表定义为数组,如果不想返回指针,则可以返回对此数组的引用,而不是指针。:)

不想返回。而是返回一个
std::string
。如果必须,则使用
new
分配数组,并向调用者返回
unique\u ptr
。列表的类型是什么?您真的应该显示
杂货的定义。只是一个猜测,但您可能应该返回一个
const char*
-
const char*Groceries::getList()const
。我建议您使用调试器,在return语句处放置一个断点,并验证
list
@boom\u box的值是,但是,通过阅读
std::string
的文档可以很容易地回答这个问题。你为什么不那样做呢?谢谢,这实际上起了很大的作用。
char * another_function(void)
{
  static char text_buffer[64];
  strcpy(text_buffer, "Use a debugger!\n");
  return text_buffer;
}