char *recvmsg(){
char buffer[1024];
return buffer;
}
int main(){
char *reply = recvmsg();
.....
}
Я получаю предупреждение:
предупреждение C4172: возвращение адреса локальной переменной или временного
У вас есть несколько вариантов ... То, как вы это делаете сейчас, приведет к неопределенному поведению, так как массив выйдет из области видимости, как только функция 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;
}
как насчет проезда по ссылке
char buf[1024];
PutStuffInBuff(&buf);