想从函数生成一个字符串,以便格式化一些数据,所以函数应该返回一个字符串。
试图做“明显的”,如下所示,但这会打印垃圾:
Select count(distinct Name) from Table where name not in (
select Name from Table where Animal = 'Dog')
我认为这是因为用于函数中定义的#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];
答案 0 :(得分:9)
std::string
了,这很简单:
#include <iostream>
#include <string>
std::string hello_world()
{
return "Hello world\n";
}
int main()
{
std::cout << hello_world();
}
答案 1 :(得分:5)
您正在编程c。这不错,但你的问题是关于c++,所以这就是你问的问题的解决方案:
std::string hello_world()
{
std::string temp;
// todo: do whatever string operations you want here
temp = "Hello World";
return temp;
}
int main()
{
std::string result = hello_world();
std::cout << result << std::endl;
return 0;
}
答案 2 :(得分:2)
最佳解决方案是使用std::string
。但是,如果必须使用数组,则最好在调用函数中分配它(在本例中为main()
):
#include <iostream>
#include <cstring>
void hello_world(char * s)
{
memcpy(s, "Hello world\n", 13);
}
int main(void)
{
char mys[13];
hello_world(mys);
std::cout<<mys;
return 0;
}
答案 3 :(得分:1)
但是,如果你想编写纯C代码,可以做类似的事情。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *HelloWorld(char *s, int size)
{
sprintf(s, "Hello world!\n");
return s;
}
int main (int argc, char *argv[])
{
char s[100];
printf(HelloWorld(s, 100));
return 0;
}