Вернуть 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;
}