Как уже упоминали GMan и Neil, чтобы работать, вам нужно изменить func на:
char* func();
или void func(char*& p);
, которая решит вашу непосредственную проблему.
Однако существует проблема с обслуживанием. В любом случае, func возвращает указатель. Что не ясно пользователю func, так это то, что возвращаемый указатель должен быть удален. По этой причине обычно избегайте этой конструкции, если не требуется 100%. Скорее всего:
- Помогите пользователю выделить правильный объем памяти, который затем может быть передан в func
- Использование объекта для хранения выделенной памяти. Затем объект может удалить массив символов при его разрушении.
Так что для кода C ++ я бы порекомендовал:
class CBuf
{
public
CBuf()
{
iBuf = new char[100];
}
~CBuf
{
delete[] iBuf;
}
char* func()
{
//do stuff;
return iBuf;
}
private:
char* iBuf;
};
int main()
{
CBuf cb;
char* mychar = cb.func();
//do stuff with character array
//destructor gets called here because cb goes out of scope
}
Однако, особенно в программировании на C, может быть на 100% необходимо иметь некоторую функцию сортировки для создания массива. Поэтому в C-программировании вы можете заменить деструктор функциями CreateCBuf
и DestroyCBuf
. Таким образом, пользователь вашей библиотеки будет знать, что возвращаемый буфер необходимо уничтожить.