【问题标题】:How can I make function that take a string and return a char array如何制作接受字符串并返回 char 数组的函数
【发布时间】:2021-01-08 12:40:35
【问题描述】:

我想返回一个字符数组,这是代码

char convert(string user){
    int n = user.length();
    char char_array[n+1];
    strcpy(char_array,user.c_str()) ;
    return char_array;
}

【问题讨论】:

  • 你有什么问题?这里有一些问题,但最终你可能根本不需要这个函数。您可以使用 std::string::data() 将非 const char * 获取到由字符串管理的 char 数组。
  • 首先,您要返回char* 而不是char。其次,您要使用char* char_array = new char[n+1] 动态分配数组,否则返回数组将导致未定义的行为。确保在需要时删除分配的数组
  • 您使用的是 C++,首先您不应该使用 char 数组,除非有非常具体的充分理由这样做。该函数还应返回char* 而不是char。并且您正试图返回一个指向一个也不起作用的局部变量的指针。对于后一点,请阅读此内容以获取更多信息:stackoverflow.com/questions/6441218/…
  • char char_array[n+1];is not even valid.
  • 是什么让你认为你首先需要一个char 数组?期望 const char * 的旧函数可以传递给您的 my_string.c_str() 结果。任何对非常量 char * 执行突变的函数通常都有一个已经存在的 std::string 类似物,它绕过了 c-stringiness。

标签: c++ string function char


【解决方案1】:

您不能从函数返回数组。您可以返回指向此类数组的第一个元素的指针。好消息是:该功能已经存在。它是std::string::c_str 方法。

void foo(const char*);     // <- legacy, cannot modify, must pass c-string

std::string x{"Hello World"};
foo( x.c_str() );

在您的代码中,char char_array[n+1]; 不是有效的标准 C++。有关详细信息,请参见此处: Why aren't variable-length arrays part of the C++ standard?

此外,您尝试返回指向本地数组的指针。一旦函数结束,数组的生命周期已经过去,指针就没有用了。更多关于这里: Can a local variable's memory be accessed outside its scope?

最后(也是最起码)当您需要 char* 时,您声明了返回 char 的函数。但是,由于最后一点,修复它并没有真正的帮助。

【讨论】:

  • 看我在从用户转换字符串后托盘制作堆栈并放置字符我对转换函数进行了一些更改,但是当我使用 peek 函数时它没有给我任何回报
  • void 转换(字符串用户){ int n = user.length(); char char_array[n+1]; strcpy(char_array,user.c_str()) ; for (int i = 0 ; i
  • @AhmedElgindy “将 std::string 转换为 char 数组”并没有多大意义。 std::string 一个字符数组(以及更多)
  • @AhmedElgindy 您发布的代码可能在没有编译器错误的情况下编译,但这是完全错误的。如果您对问题中未包含的代码有其他问题/疑问,我不知道。 cmets中的代码不可读
  • @AhmedElgindy 什么堆栈?也许您想打开一个新问题,询问您要解决的实际问题。这里的问题似乎是xy problem
猜你喜欢
  • 2015-02-10
  • 1970-01-01
  • 2012-09-24
  • 2014-06-27
  • 2010-12-23
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多