Вернуть char []/строку из функции

Im довольно новый для кодирования в C и в настоящее время im пытается создать функцию, которая возвращает массив c string/ char и присваивает переменной.

До сих пор Ive наблюдал, что возвращение char * является наиболее распространенным решением. Поэтому я попытался:

char* createStr() {
    char char1= 'm';
    char char2= 'y';
    char str[3];
    str[0] = char1;
    str[1] = char2;
    str[2] = '\0';
    char* cp = str;
    return cp;
}

Мой вопрос в том, как я могу использовать этот возвращенный char * и назначить массив char, на который он указывает, переменной char []?

Ive попробовал (все привели к ошибкам noob-утопления):

  • char * charP = createStr();
  • char myStr [3] = & createStr();
  • char * charP = * createStr();

Ответы

Ответ 1

Обратите внимание, что вы не динамически выделяете переменную, что в значительной степени означает, что данные внутри str в вашей функции будут потеряны до конца функции.

Вы должны иметь:

char * createStr() {

    char char1= 'm';
    char char2= 'y';

    char *str = (char *) malloc(sizeof(char) * 3);
    str[0] = char1;
    str[1] = char2;
    str[2] = '\0';

    return str;

}

Затем, когда вы вызываете функцию, тип переменной, которая будет принимать данные, должен соответствовать типу функции return. Итак, вы должны иметь:

char *returned_str = createStr();

Ответ 2

char* charP = createStr();

Было бы правильно, если бы ваша функция была правильной. К сожалению, вы возвращаете указатель на локальную переменную в функции, что означает, что он является указателем на данные undefined, как только функция вернется. Вам нужно использовать выделение кучи, например malloc, для строки в вашей функции, чтобы возвращаемый указатель имел какое-либо значение. Затем вам нужно запомнить его позже.

Ответ 3

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

измените его на

char* createStr() {
    char char1= 'm';
    char char2= 'y';
    char *str = malloc(3 * sizeof(char));
    if(str == NULL) return NULL;
    str[0] = char1;
    str[1] = char2;
    str[2] = '\0';
    return str;
}

Ответ 4

Включение "string.h" упрощает работу. Более простой способ решить вашу проблему:

#include <string.h>
    char* createStr(){
    static char str[20] = "my";
    return str;
}
int main(){
    char a[20];
    strcpy(a,createStr()); //this will copy the returned value of createStr() into a[]
    printf("%s",a);
    return 0;
}