Aprenda a devolver una cadena desde una función C
En uno de mis programas en C, tuve la tarea de devolver una cadena desde una función:
xxxxx myName() { return "Flavio";}
Lo complicado es definir el tipo de valor de retorno.
Las cadenas en C son matrices de char
elementos, por lo que realmente no podemos devolver una cadena: debemos devolver un puntero al primer elemento de la cadena.
Por eso es que necesitamos utilizar const char*
:
const char* myName() { return "Flavio";}
A continuación se muestra un ejemplo de programa en funcionamiento:
#include stdio.hconst char* myName() { return "Flavio";}int main(void) { printf("%s", myName());}
Si prefieres asignar el resultado a una variable, puedes invocar la función de esta manera:
const char* name = myName();
También podemos escribir el operador puntero*
de estas maneras:
const char * myName()const char *myName()
Todas las formas son perfectamente válidas.
Tenga en cuenta el uso de const
, porque desde la función estoy devolviendo una cadena literal , una cadena definida entre comillas dobles, que es una constante.
Tenga en cuenta que no es posible modificar una cadena literal en C.
Otra cosa a tener en cuenta es que no puedes devolver una cadena definida como una variable local desde una función C, porque la variable se destruirá automáticamente (liberará) cuando la función termine su ejecución y, como tal, no estará disponible, si por ejemplo intentas hacer lo siguiente: Fotos Porno y actrices porno
#include stdio.hconst char* myName() { char name[6] = "Flavio"; return name;}int main(void) { printf("%s", myName());}
Recibirás una advertencia y algunas tonterías como esta:
hello.c:5:10: warning: address of stack memory associated with local variable 'name' returned [-Wreturn-stack-address] return name; ^~~~1 warning generated.B��Z K���⏎
Observe la B��Z K���⏎
línea al final, que indica que la memoria que ocupaba la cadena en un principio se ha borrado y que hay otros datos aleatorios en esa memoria. Por lo tanto, no recuperamos la cadena original.
Cambiando myName()
a
const char* myName() { char *name = "Flavio"; return name;}
hace que el programa funcione bien.
La razón es que las variables se asignan en la pila , de manera predeterminada. Pero al declarar un puntero, el valor al que apunta el puntero se asigna en el montón , y el montón no se borra cuando finaliza la función.
Tips C
Tal vez te puede interesar:
- Introducción a React
- Agregar evento de clic a los elementos DOM devueltos desde querySelectorAll
- Cómo cambiar el valor de un nodo DOM
- Cómo comprobar si un elemento DOM tiene una clase
Cómo devolver una cadena desde una función C
En uno de mis programas en C, tuve la tarea de devolver una cadena desde una función: Aprenda a devolver una cadena desde una función C Aprenda a devolver un
programar
es
https://aprendeprogramando.es/static/images/programar-como-devolver-una-cadena-desde-una-funcion-c-2270-0.jpg
2024-10-17
Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente