Другие говорили вам, что нужно сделать, чтобы решить непосредственную проблему: либо выделите место для tempMake, используя new или malloc, либо используйте std: string.
Возможно, вы не хотите возвращать указатель на член структуры из функции. В то время как вы можете сделать правильный код при этом, и для этого есть очень веские причины, это может быть не один из таких случаев. Проблема связана с владением. Если вы выставите переменную по указателю, тогда конечный пользователь может свободно передавать этого парня в другие функции, которые могут в конечном итоге освободить его, прежде чем вы захотите, или изменить его каким-либо другим способом. Кроме того, что происходит, когда вы решаете освободить эту память самостоятельно? Что если парень из вашей команды, который не знает ваш код, использовал это значение указателя после того, как вы его удалили? Что, если никто не освобождает это, и вы используете эту структуру снова и снова? Это утечка памяти.
Лучшая модель - скрыть эту функциональность - запретить прямой доступ к членам вашего класса и не возвращать указатель из функции, если это не является абсолютно необходимым. Я думаю, что в C ++ наиболее элегантным решением было бы возвращение std :: string. В прямой C вместо этого передайте символ ** (назовем его x) в функцию и сделайте это:
int askMake(char** x)
{
char tempMake[100];//or some value you know to be large enough
cout << "Enter Make:" << endl;
cin >> tempMake;//i would use cin.get() so you know the length of the string.
//so let's pretend we have that length in a variable called stringLen.
*x = new char[stringLen];
for(int i = 0; x && i < stringLen; i++)
{
(*x)[i] = tempMake[i];
}
if(x)
return 0;
else
return 1;
}