Подтвердить что ты не робот

Как вернуть массив char из функции?

Возможный дубликат:
С++ возвращаемый массив в функции

Я пробовал следующее:

char[10] testfunc()
{
    char[10] str;

    return str;
}
4b9b3361

Ответ 1

Лучше всего в качестве параметра 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
}

Ответ 2

Как вы используете С++, вы можете использовать std::string.

Ответ 3

Вы должны понимать, что 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); 

Ответ 4

С Boost:

boost::array<char, 10> testfunc()
{
    boost::array<char, 10> str;

    return str;
}

Нормальный char[10] (или любой другой массив) не может быть возвращен из функции.

Ответ 5

a char массив возвращается char *, но функция, которую вы написали, не работает, потому что вы возвращаете автоматическую переменную, которая исчезает при выходе из функции. Используйте что-то вроде этого:

char *testfunc() {
    char* arr = malloc(100);
    strcpy(arr,"xxxx");
    return arr;
}

Это, конечно, если вы возвращаете массив в смысле C, а не std:: или boost:: или что-то еще. Как отмечено в разделе комментариев: не забудьте освободить память от вызывающего.