Вопрос:
Возможный дубликат:
С++ возвращаемый массив в функции
Я пробовал следующее:
char[10] testfunc() { char[10] str; return str; } Лучший ответ:
Лучше всего в качестве параметра out:
void testfunc(char* outStr){ char str[10]; for(int i=0; i < 10; ++i){ outStr[i] = str[i]; } }
Вызывается
int main(){ char myStr[10]; testfunc(myStr); // myStr is now filled } Ответ №1
Как вы используете С++, вы можете использовать std::string.
Ответ №2
Вы должны понимать, что char[10] совпадает с char*. Фактически вы возвращаете указатель. Теперь указатель указывает на переменную (str), которая уничтожается, как только вы выходите из функции, поэтому указатель указывает на… ничего!
Обычно в C вы явно выделяете память в этом случае, которая не будет уничтожена при завершении функции:
char* testfunc() { char* str = malloc(10 * sizeof(char)); return str; }
Имейте в виду, хотя! Память, на которую указывает str, теперь НИКОГДА не уничтожается. Это известно как “утечка памяти”. Обязательно free() память после того, как вы закончите с ней:
foo = testfunc(); // do something with your foo free(foo); Ответ №3
С Boost:
boost::array<char, 10> testfunc() { boost::array<char, 10> str; return str; }
Нормальный char[10] (или любой другой массив) не может быть возвращен из функции.
Ответ №4
a char массив возвращается char *, но функция, которую вы написали, не работает, потому что вы возвращаете автоматическую переменную, которая исчезает при выходе из функции.
Используйте что-то вроде этого:
char *testfunc() { char* arr = malloc(100); strcpy(arr,»xxxx»); return arr; }
Это, конечно, если вы возвращаете массив в смысле C, а не std:: или boost:: или что-то еще.
Как отмечено в разделе комментариев:
не забудьте освободить память от вызывающего.