Хотелось бы сгенерировать строку из функции, чтобы отформатировать некоторые данные, поэтому функция должна вернуть строку.
Попытка сделать «очевидное», показанное ниже, но это печатает мусор:
#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
используетstack.
Если я переместу 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;
}