Как вернуть локальный массив в C ++?

char *recvmsg(){
    char buffer[1024];
    return buffer;
}

int main(){
    char *reply = recvmsg();
    .....
}

Я получаю предупреждение:

предупреждение C4172: возвращение адреса локальной переменной или временного

22
задан Pang 15 January 2016 в 01:26
поделиться

2 ответа

У вас есть несколько вариантов ... То, как вы это делаете сейчас, приведет к неопределенному поведению, так как массив выйдет из области видимости, как только функция hte вернется. Так что одним из вариантов является динамическое распределение памяти.

char * recmsg()
{ 
   char * array = new char[128];
   return array;
}

Просто не забудьте очистить его с помощью delete (или бесплатно, если вы использовали malloc). Во-вторых, вы можете использовать параметр ...

void recmsg(char * message, int size)
{
   if (message == 0)
      message = new char[size];
}

Опять, то же самое относится и к уборке, как и в предыдущем Также обратите внимание на проверку 0, чтобы убедиться, что вы не вызываете new для указателя, который уже выделен.

Наконец, вы могли бы использовать вектор ..

std::vector<char> recmsg()
{
   std::vector<char> temp;

   //do stuff with vector here

   return temp;
}
0
ответ дан 29 November 2019 в 03:53
поделиться

как насчет проезда по ссылке

char buf[1024];
PutStuffInBuff(&buf);
0
ответ дан 29 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: