, когда вы создаете локальные переменные внутри функции, которые создаются в стеке, скорее всего, будут перезаписаны в памяти при выходе из функции.
поэтому подобный код в большинстве реализаций c ++ не будет работать:
char[] pupulateChar()
{
char* ch = "wonet return me";
return ch;
}
Исправление: создать переменную, которую нужно заполнить вне функции или где вы хотите ее использовать, а затем передать ее в качестве параметра и манипулировать функцией, например:
void populateChar(char* ch){
strcpy(ch,"fill me will, this will stay",size); // this will work as long it won overflow it.
}
int main(){
char ch[100]; // reserve memory in stack outside the function
populateChar(ch); //populate array
}
c ++ 11 решение с использованием std :: move (ch) для приведения lvalues к rvalues
void populateChar(char* && fillme){
fillme = new char[20];
strcpy(fillme, "this worked for me");
}
int main(){
char* ch;
populateChar(std::move(ch));
return 0;
}
или эта опция в c ++ 11:
char* populateChar(){
char* ch = "test char";
// will change from lvalue to r value
return std::move(ch);
}
int main(){
char* ch = populateChar();
return 0;
}