Jochen Arndt
Общий метод заключается в выделении памяти для строки с помощью malloc()
и возвращая а char*
указатель на эту выделенную память. Затем вызывающая функция отвечает за освобождение памяти:
char *SomeFunc()
{
// Determine required size and allocate
// Don't forget to add one for the terminating NULL char
char *buf = (char *)malloc(requiredSize);
// Write to buf here ensuring that requiredSize is not exceeded
// Calling function must free the memory
return buf;
}
В некоторых случаях вы также можете использовать
static char[]
буфер. Затем вернуть
const char*
к этому буферу. Но вы должны знать о возможных проблемах ведьмы таких функций (фиксированный размер, не потокобезопасный).
const char *SomeFunc()
{
static char buf[SOME_FUNC_STATIC_BUF_SIZE] = "";
// Write to buf here ensuring that SOME_FUNC_STATIC_BUF_SIZE is not exceeded
return buf;
}
Другим решением является передача буфера и его размера в качестве аргументов:
char *SomeFunc(char *buf, size_t size)
{
// Write to buf here ensuring that size is not exceeded
return buf;
}
В случае C++ используйте строковый тип C++, например
std::string
вместо этого и верните это. Тогда вам не нужно заботиться об освобождении памяти:
std::string SomeFunc()
{
std::string buf;
// Assign to buf here
return buf;
}