Devuelve char / string de una función

Soy bastante nuevo en la encoding en C y actualmente bash crear una función que devuelva ac string / char array y asignar a una variable.

Hasta ahora, he observado que devolver un char * es la solución más común. Así que lo intenté:

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; } 

Mi pregunta es ¿cómo uso este char* devuelto y asigno la matriz de caracteres a la que apunta a una variable char []?

Lo he intentado (todo condujo a errores noob-ahogamiento):

  1. char* charP = createStr();
  2. char myStr[3] = &createStr();
  3. char* charP = *createStr();

Observe que no está asignando dinámicamente la variable, lo que significa que los datos dentro de str , en su función, se perderán para el final de la función.

Deberías:

 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; } 

Luego, cuando llama a la función, el tipo de la variable que recibirá los datos debe coincidir con el de la función return. Entonces, deberías tener:

 char *returned_str = createStr(); 

Si desea devolver un char* de una función, asegúrese de hacerlo malloc() . Las matrices de caracteres inicializados astackdos no tienen sentido al regresar, ya que acceder a ellos después de regresar de esa función es un comportamiento indefinido.

cambiarlo a

 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; } 
 char* charP = createStr(); 

Sería correcto si tu función era correcta. Desafortunadamente está devolviendo un puntero a una variable local en la función, lo que significa que es un puntero a datos indefinidos tan pronto como la función retorna. Debe usar la asignación de montón como malloc para la cadena en su función para que el puntero que regrese tenga algún significado. Entonces debes recordar liberarlo más tarde.

Incluir “string.h” hace las cosas más fáciles. Una forma más fácil de abordar su problema es:

 #include  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; } 

puede usar una matriz estática en su método, para evitar la pérdida de su matriz cuando finalice su función:

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

}