【发布时间】:2018-05-24 10:27:52
【问题描述】:
想从一个函数中生成一个字符串,以便格式化一些数据,所以函数应该返回一个字符串。
试图做“明显”,如下所示,但这会打印垃圾:
#include <iostream>
#include <string>
char * hello_world()
{
char res[13];
memcpy(res, "Hello world\n", 13);
return res;
}
int main(void)
{
printf(hello_world());
return 0;
}
我认为这是因为在函数中定义的用于res 变量的堆栈内存在可以写入值之前被覆盖,可能是在printf 调用使用堆栈时。
如果我将 char res[13]; 移到函数之外,从而使其成为全局,那么它可以工作。
那么答案是拥有一个可用于结果的全局字符缓冲区(字符串)吗?
可能会做类似的事情:
char * hello_world(char * res)
{
memcpy(res, "Hello world\n", 13); // 11 characters + newline + 0 for string termination
return res;
}
char res[13];
int main(void)
{
printf(hello_world(res));
return 0;
}
【问题讨论】:
-
使用
std::string? -
或者您可以添加
using namespace std。它是 C++ 标准库,它是类和函数的集合。内置的 C++ 库例程保存在标准命名空间中。这包括 cout、cin、string、vector、map 等内容。