No video

Bloque 7.4: Strings Dinamicos y Funcion exit

  Рет қаралды 24,329

Empieza A Programar

Empieza A Programar

Күн бұрын

Se enseña que son y a utilizar los Strings Dinamicos y las mejoras que aportan, ademas se enseña a utilizar la funcion exit que se usara en todos los videos a partir de ahora.
Aqui teneis el PDF con las funciones mas importantes de String.h:
www.dropbox.co...

Пікірлер: 38
@agustinlyon8173
@agustinlyon8173 3 жыл бұрын
Me ha encantado el video, muy bueno. Todas estas cosillas me van a ayudar para mi proyecto de programacion 2
@pedrogarciaferrera3671
@pedrogarciaferrera3671 6 жыл бұрын
Hola, genial video. Si uso exit en una función fuera del main, sale de la función en la que esté o de todo el programa?
@saulaxel
@saulaxel 6 жыл бұрын
De todo el programa y regresa al proceso que mando a llamar a tu programa el código de ejecución que usaste como argumento.
@jairzinhosantosfajardo9731
@jairzinhosantosfajardo9731 9 жыл бұрын
amigo en el devC++ 5.10 "NO" me da error al usar realloc , me compila todo bien aqui dejo mi codigo #include #include #include typedef struct{ char *nombre; char *autor; }libro; int main(){ char aux[50]; libro lib; printf("Ingresa un nombre para el libro : "); fflush(stdin); scanf("%[^ ]",&aux); lib.nombre=(char*)realloc(lib.nombre,(strlen(aux)+1)*sizeof(char)); if(lib.nombre==NULL){ printf("No se a podido reservar la memoria requerida "); exit(1); } strcpy(lib.nombre,aux); printf("Ingresa un autor para el libro : "); fflush(stdin); scanf("%[^ ]",&aux); lib.autor=(char*)realloc(lib.autor,(strlen(aux)+1)*sizeof(char)); if(lib.autor==NULL){ printf("No se a podido reservar la memoria requerida "); exit(1); } strcpy(lib.autor,aux); printf(" El nombre y autor del libro son : "); printf("%s ",lib.nombre); printf("%s ",lib.autor); free(lib.autor); free(lib.nombre); return 0; }
@alansalmeron2359
@alansalmeron2359 8 жыл бұрын
+Jairzinho Santos Fajardo A mi tambien me pasa lo mismo!!!!!y mi devC++ es el 5.11
@guillermotovar-sanchez5881
@guillermotovar-sanchez5881 8 жыл бұрын
+Jairzinho Santos Fajardo a mí también me compila bien. Supongo que lo que pasa es que en la versión que mencionas ha de dar por default un valor y por eso es posible compilar. Algo así como si no pusieramos la librería stdlib.h Prueba con otro IDE o con una versión anterior, a ver si es lo mismo. Saludos!
@manueltorrealba7518
@manueltorrealba7518 7 жыл бұрын
Tengo un pequeño problema, lo que pasa es que al momento de introducir los nombres me imprime un salto de línea extra. Este es mi código: //crear una estructura que represente un libro y usando los strings dinamicos #include #include #include typedef struct{ char *nombre; char *autor; }libro; void cambio (char aux [50]); int main (){ char aux [50]; libro JDT; printf ("Introduce un nombre para el libro: "); fflush (stdin); fgets(aux,50,stdin); cambio (aux); JDT.nombre = (char*)malloc((strlen(aux)+1)*sizeof(char)); if (JDT.nombre == NULL){ printf ("No se ha podido reservar memoria. "); exit(1); } strcpy(JDT.nombre,aux); printf ("Introduce un autor para el libro: "); fflush (stdin); fgets(aux,50,stdin); cambio (aux); JDT.autor = (char*)malloc((strlen(aux)+1)*sizeof(char)); if (JDT.autor == NULL){ printf ("No se ha podido reservar memoria. "); exit(1); } strcpy(JDT.autor,aux); printf ("%s ",JDT.nombre); printf ("%s ",JDT.autor); free(JDT.autor); free(JDT.nombre); system ("pause"); return 0; } void cambio (char aux [50]){ int i, temp = 0; for (i = 0; i < 100 && temp == 0; i++){ if (aux [i] == ' '){ aux [i] == '\0'; temp = 1; } } }
@neonh3043
@neonh3043 7 жыл бұрын
Esta forma de cambiar el por \0 me parece mejor: void espacio (char f[50]){ int o; o=strlen(f); f[o-1]='\0'; }
@srdonpitopocho1183
@srdonpitopocho1183 5 жыл бұрын
buen aporte
@facundogallardo6122
@facundogallardo6122 4 жыл бұрын
Creo que en el caso en el que el string que escribas tenga el mismo tamaño que el que le das para guardar estarías perdiendo la última letra ya que no tomaría el porque no tendría el espacio para ello.
@marktulsoto8685
@marktulsoto8685 3 жыл бұрын
Como funcionaria strcat( ) o strcpy( ) con strings dinamicos cuando se exede el temaño inicial? Osea, automaticamente el puntero pasa a apuntar a un nuevo espacio con tamaño mayor y serian copiados los caracteres? Y si es esi, que pasa con la memoria anterior, es liberada automaticamente ?
@alexmasxmenosesmenos4441
@alexmasxmenosesmenos4441 Жыл бұрын
con strcat, si en un string tienes "hola" y en el segundo string tienes "mundo", coges lo que hay en el segundo strings y lo "pegas" en el primer strings, quedándote "hola mundo" con strcpy, simplemente copias lo que hay en un string en otro string. Mas o menos creo que es esto. :)
@emilioortega9487
@emilioortega9487 7 жыл бұрын
a los 6:15 por que dices "no podria usar fgets y pasarselo directamente a la variable dinamica, seria mas complicado", hay algun video donde se haga pasando directo ?
@dek094
@dek094 9 жыл бұрын
en qué vídeo explicas la función cambio? gracias
@albertuco95
@albertuco95 5 жыл бұрын
más o menos en casi todos los que utiliza la funcion fgets
@TheGocho28
@TheGocho28 7 жыл бұрын
la funcion exit, me cierra el codigo completamente o me cierra la totalidad de la porcion de una funcion, es decir si la hubieramos metido en void cambio... se cierra esa funcion y me lanza al codigo main directamente o me cierra todo el programa??
@agustinlyon8173
@agustinlyon8173 3 жыл бұрын
Estoy taaardiiiisimoooo, pero para el que me este leyendo y tenga la duda el exit() les cerrara todo el programa. Asi que sepan bien usarlo
@sergiosanjose1131
@sergiosanjose1131 3 жыл бұрын
por que no se puede utilizar la funcion free con la variable aux???
@marktulsoto8685
@marktulsoto8685 3 жыл бұрын
Aux es un vector estatico, portanto es guarado en el Stack y "se libera automaticamente", ya los otros vectores donde usa free, es porque son vectores dinamicos, que son guardados en el Heap y no son liberados automaticamente. Recuerda: solo la memoria dinamica debe ser liberada explicitamente con free, la memoria estatica siempre es liberada automaticamente.
@andersonloaiza9622
@andersonloaiza9622 9 жыл бұрын
tengo una pequeña duda, con que fin utilizaste el temp en la funcion cambio, de antemano gracias
@EmpiezaAProgramar
@EmpiezaAProgramar 9 жыл бұрын
anderson loaiza Como en todos los videos este no es diferente, todo lo que doy por hecho (como la funcion cambio) es porque ya esta explicado anteriormente, por lo que si no entiendes algo de la funcion lo ideal es que te vayas al video en cuestion (no recuerdo si sera del bloque 6 o 7) y te lo repases. De todas formas, si estas en este bloque, deberias de ser capaz de entender el codigo, repasate las rutas de escape o condiciones de parada que tambien se suelen llamar: kzbin.info/www/bejne/mIOkpZulrceJr6M Un saludo.
@themercury8250
@themercury8250 10 жыл бұрын
una pregunta, en la linea: JDT.nombre = (char*)malloc((strlen(aux))*sizeof(char)); me da este error al compilar: [Error] incompatible types when assigning to type 'char *[50]' from type 'char *' por que puede ser?
@pablopiedad90
@pablopiedad90 7 жыл бұрын
JDT.nombre = (char*)malloc((strlen(aux)+1)*sizeof(char)); Si pones esto entonces se asignar el espacio de memoria para una cadena y su '/0' famoso
@memero32xd
@memero32xd 4 жыл бұрын
Por qué en el prototipo de las funciones al iniciar pasa el tamaño de aux como 100 en vez de 50?
@yuriantoniosalazarromero4764
@yuriantoniosalazarromero4764 3 жыл бұрын
De acuerdo Bill Acosta es probable que se le haya olvidado actualizarlo, seguro lo copio de algún ejemplo anterior, lo mismo ocurre con la variable "i" en la función cambio se le olvido poner "i
@edkaem259
@edkaem259 8 жыл бұрын
Hola, al parecer se puede usar malloc y calloc par el mismo objetivo, checken el código: #include #include #include int main(){ int i; int N; int *vector; printf("Dame un valor para N: "); scanf("%i",&N); vector = (int*)calloc(N,sizeof(int)); if(vector == NULL) { printf("No se ha podido reservar la memoria. "); } else { for(i=0; i
@smith6540
@smith6540 7 жыл бұрын
si solo que calloc inicializa el vector en 0 y el malloc no
@franciscofranceschi8280
@franciscofranceschi8280 3 жыл бұрын
En el caso que nesecite un arreglo de estructuras como se haría de forma dinamica?
@EmpiezaAProgramar
@EmpiezaAProgramar 3 жыл бұрын
Echale un ojo a todos los videos de la lista de reproduccion de C antes de preguntar, hay un video precisamente de eso!! kzbin.info/www/bejne/gWK5YX-wq7KSaZY&ab_channel=EmpiezaAProgramar
@franciscofranceschi8280
@franciscofranceschi8280 3 жыл бұрын
@@EmpiezaAProgramar muchas gracias por responder
@EmpiezaAProgramar
@EmpiezaAProgramar 3 жыл бұрын
@@franciscofranceschi8280 joder todo sea eso, dale las gracias a los que investigan contra el coronavirus :P
@user-lt6se4qn8v
@user-lt6se4qn8v 4 жыл бұрын
Puedes usar scanf("%[^ ]s", variableString) ; Para capturar texto con espacios y sin ' ' Para ahorrate el cambio ' ' por '\0'
@agustinlyon8173
@agustinlyon8173 3 жыл бұрын
El dijo que capturar datos con el scanf era incorrecto.
@Jaredcito1204
@Jaredcito1204 8 ай бұрын
@@agustinlyon8173 no dijo que era incorrecto solo que con scanf no imprimia espacios pero con la sentencia que dijo se soluciona eso
@Jaredcito1204
@Jaredcito1204 8 ай бұрын
@@agustinlyon8173 Olvidalo, lo pobre y permite superar los espacios asignados, o sea accede a espacio de memoria que no se asigno
@carlosdelgado4867
@carlosdelgado4867 7 жыл бұрын
amigo no se puede descargar el pdf!!
@marktulsoto8685
@marktulsoto8685 3 жыл бұрын
Mi codigo: #include #include #include #define N 50 typedef char* String; typedef struct{ String name; String author; }Book; Book newBook(String,String); void freeBook(Book); void fixStringEnd(char []); int main() { char name[N]=""; char author[N]=""; printf("Write the name of book: "); fgets(name,N,stdin); fixStringEnd(name); printf("Write the author: "); fflush(stdin);//LIMPAR BUFFER fgets(author,N,stdin); fixStringEnd(author); Book book=newBook(name,author); printf("the book called: %s was written by: %s ",book.name,book.author); freeBook(book); system("pause"); return 0; } void fixStringEnd(char s[]){ for(int i=0;i
@HorckunHarotTutoriales
@HorckunHarotTutoriales 7 жыл бұрын
// LIBROS MEDIANTE VECTORES DINÁMICOS#include #include #include #define p printf #define s scanftypedef struct { int paginas; int precio; int lleno; char *titulo; char *autor; }libro;libro libros[5];void vaciar(); void cambiar(char palabras[]); void insertar(); void buscar();int main() { vaciar(); int opcion,i; do { do { p("Elige una opci%cn: ",162); p("================= "); p("[1] - A%cadir libro. ",164); p("[2] - Buscar libro. "); p("Opci%cn: ",162); fflush(stdin); s("%i",&opcion); p(" "); switch(opcion) { case 1: { insertar(); break; } case 2: { buscar(); break; } } } while(opcion < 1 || opcion > 2); p("Elige una opci%cn: ",162); p("================= "); p("[1] - Continuar. "); p("[2] - Salir. "); p("Opci%cn: ",162); fflush(stdin); s("%i",&opcion); p(" "); } while(opcion == 1); for(i = 0; i < 5; i++) { free(libros[i].autor); free(libros[i].titulo); } p("Visita: horckun.es/ "); return 0; } void vaciar() { int i; for(i = 0; i < 5; i++) { libros[i].lleno = 0; p("%i/5 libros vacios... ",i+1); Sleep(1000); } p(" "); p("%i libros vac%cos. ",i,161); } void cambiar(char palabras[]) { int i,aux; aux = 0; for(i = 0; i < 100 && aux == 0; i++) { if(palabras[i] == ' ') { palabras[i] = '\0'; } } } void insertar() { srand(time(NULL)); int i,aux; char titulo[100]; aux = 0; for(i = 0; i < 5 && aux == 0; i++) { if(libros[i].lleno == 0) { libros[i].paginas = rand()%1001; libros[i].precio = rand()%101; p("Introduce el t%ctulo del libro: ",161); fflush(stdin); fgets(titulo,100,stdin); cambiar(titulo); p(" "); libros[i].titulo = (char*)malloc((strlen(titulo)+1)*sizeof(char)); if(libros[i].titulo == NULL) { p("No se ha podido asignar un tamaño a la memoria. "); exit(1); } strcpy(libros[i].titulo,titulo); p("Introduce el autor del libro: "); fflush(stdin); fgets(titulo,100,stdin); cambiar(titulo); p(" "); libros[i].autor = (char*)malloc((strlen(titulo)+1)*sizeof(char)); if(libros[i].autor == NULL) { p("No se ha podido asignar un tamaño a la memoria. "); exit(1); } strcpy(libros[i].autor,titulo); p("El libro %s pertenece a %s, tiene %i p%cginas y cuesta %i euros. ",libros[i].titulo,libros[i].autor,libros[i].paginas,160,libros[i].precio); aux = 1; libros[i].lleno = 1; p("%i libros a%cadidos. ",i+1,164); } if(libros[5].lleno == 1) { p("No se puede a%cadir m%cs libros. ",164,160); } } } void buscar() { int opcion,aux,cmp,i; char titulo[100]; aux = 0; do { p("Elige una opci%cn: ",162); p("================= "); p("[1] - Buscar por t%ctulo. ",161); p("[2] - Buscar por autor. "); p("Opci%cn: ",162); fflush(stdin); s("%i",&opcion); p(" "); } while(opcion < 1 || opcion > 2); if(opcion == 1) { p("Introduce el t%ctulo a buscar: ",161); fflush(stdin); fgets(titulo,100,stdin); cambiar(titulo); p(" "); for(i = 0; i < 5 && aux == 0; i++) { cmp = strcmp(titulo,libros[i].titulo); if(cmp == 0) { p("El libro %s pertenece a %s, tiene %i p%cginas y cuesta %i euros. ",libros[i].titulo,libros[i].autor,libros[i].paginas,160,libros[i].precio); aux = 1; } } } else { if(opcion == 2) { p("Introduce el autor a buscar: "); fflush(stdin); fgets(titulo,100,stdin); cambiar(titulo); p(" "); for(i = 0; i < 5 && aux == 0; i++) { cmp = strcmp(titulo,libros[i].autor); if(cmp == 0) { p("El libro %s pertenece a %s, tiene %i p%cginas y cuesta %i euros. ",libros[i].titulo,libros[i].autor,libros[i].paginas,160,libros[i].precio); aux = 1; } } } } }
Bloque 7.5: Matrices Dinamicas
16:02
Empieza A Programar
Рет қаралды 41 М.
Bloque 8.2: Ejemplo Leer de fichero y meter datos en Estructura.
21:05
Empieza A Programar
Рет қаралды 145 М.
❌Разве такое возможно? #story
01:00
Кэри Найс
Рет қаралды 3,2 МЛН
The Giant sleep in the town 👹🛏️🏡
00:24
Construction Site
Рет қаралды 20 МЛН
Bloque 5.5: ¿Que son los Strings? y Como Compararlos
15:43
Empieza A Programar
Рет қаралды 94 М.
C++ desde Cero | Retorno de Valor (return) | Parte 23
8:40
Danisable Programacion
Рет қаралды 2,8 М.
Writing a Programming Language - 06/01/2024
2:15:45
Seán Kelleher
Рет қаралды 9 М.
Bloque 8.1: Lectura de Ficheros de Texto con fgetc y fgets
16:21
Empieza A Programar
Рет қаралды 89 М.
Templates in C++
17:58
The Cherno
Рет қаралды 587 М.
Bloque 7.2: Malloc y Realloc con Vector Dinamico
23:03
Empieza A Programar
Рет қаралды 62 М.
Advice for Writing Small Programs in C
1:45:24
Sean Barrett
Рет қаралды 143 М.
Bloque 7.1: ¿Que es la Memoria Dinamica?
17:56
Empieza A Programar
Рет қаралды 68 М.
Bloque 2.2: Ejemplos Ver si numero es par y Hallar maximo de 3 numeros
12:00
Empieza A Programar
Рет қаралды 157 М.
❌Разве такое возможно? #story
01:00
Кэри Найс
Рет қаралды 3,2 МЛН