Возможный дубликат:
С++ возвращаемый массив в функции
Я пробовал следующее:
char[10] testfunc()
{
char[10] str;
return str;
}
Возможный дубликат:
С++ возвращаемый массив в функции
Я пробовал следующее:
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
}
Как вы используете С++, вы можете использовать std::string
.
Вы должны понимать, что 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);
С Boost:
boost::array<char, 10> testfunc()
{
boost::array<char, 10> str;
return str;
}
Нормальный char[10]
(или любой другой массив) не может быть возвращен из функции.
a char массив возвращается char *, но функция, которую вы написали, не работает, потому что вы возвращаете автоматическую переменную, которая исчезает при выходе из функции. Используйте что-то вроде этого:
char *testfunc() {
char* arr = malloc(100);
strcpy(arr,"xxxx");
return arr;
}
Это, конечно, если вы возвращаете массив в смысле C, а не std:: или boost:: или что-то еще. Как отмечено в разделе комментариев: не забудьте освободить память от вызывающего.