elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No guarda la cadena dentro del vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No guarda la cadena dentro del vector  (Leído 3,083 veces)
7emiliosk8

Desconectado Desconectado

Mensajes: 73


Ver Perfil
No guarda la cadena dentro del vector
« en: 9 Febrero 2017, 21:19 pm »

Hola en este codigo me da un error cuando le pido al usuario que ingrese una cadena y que modifique la que yo ya ingrese que es "perro", el problema esta en estas lineas

Código
  1. printf("Ingrese una palabra: ");
  2. scanf("%s",(vector+1));

si no las pongo funciona bien, pero yo quiero que el usuario pueda modificar ese "perro" que yo di.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7. int i,j,a;
  8. char **vector;
  9.  
  10. vector = (char**)malloc(2*sizeof(char*));
  11.  
  12. *(vector) = "hola";
  13. *(vector + 1) = "perro";
  14. printf("Ingrese una palabra: ");
  15. scanf("%s",(vector+1));
  16.  
  17. puts("\nImprimiendo caracter a caracter:");
  18. for(i=0;i<2;i++)
  19. {
  20. for(j=0; j<strlen(*(vector+i)) ; j++)
  21. {
  22. printf("%c",*(*(vector+i)+j));
  23. }
  24. puts("");
  25. }
  26.  
  27. puts("\nImprimiendo completo:");
  28. printf("%s\n",*vector);
  29. printf("%s",*(vector+1));
  30.  
  31. free(vector);
  32.  
  33. return 0;
  34. }
  35.  
  36.  


En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: No guarda la cadena dentro del vector
« Respuesta #1 en: 9 Febrero 2017, 22:19 pm »

Me remito al siguiente post:
http://stackoverflow.com/questions/14546018/using-scanf-function-with-pointers-to-character

cito:

Citar
char *pointers;
must be intelized. you can not scan string into pointers till you will give it a value (memory value) to point at. the computer needs to know where to store the value it read from key board.

Traducción: Los punteros de caracteres, deben ser inicializados, scanf no funciona con apuntadores ya que deben tener valores iniciales. El compilador tiene que saber en donde esta la información para que esta sea leida.

A lo mejor alguien sabe si se puede hacer, de momento dejo algo que me funciono:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7. int i;
  8. char** vector;
  9.  
  10. vector = (char**)malloc(sizeof(char*)*2); // solo permite dos palabras, separadas por salto de linea o por espacio
  11.  
  12. //*(vector) = "hola";
  13. //*(vector + 1) = "perro";
  14. printf("Ingrese una palabra: ");
  15. for(i=0; i<2; i++)
  16.        {
  17.             vector[i] = (char*)malloc(sizeof(char)*100); // asumiendo que solo son palabras de máximo 100 cáracteres
  18.             scanf("%s", &(*vector[i]));
  19.        }
  20.  
  21. puts("\nImprimiendo:\n\n");
  22. for(i=0; i<2; i++)
  23. {
  24.             printf("\n%d: %s", i, vector[i]);
  25. }
  26.  
  27.  
  28. for(i=0; i<2; i++)
  29.        {
  30.            free(&vector[i]);
  31.        }
  32.        free(vector);
  33.  
  34. return 0;
  35.  
  36. }
  37.  
  38.  


« Última modificación: 9 Febrero 2017, 22:27 pm por dato000 » En línea


7emiliosk8

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Re: No guarda la cadena dentro del vector
« Respuesta #2 en: 9 Febrero 2017, 22:27 pm »

ah claro , me falto pedir memoria para los vectores que van dentro del vector ?
pero de todos modos si inicializara con el vector+1 con perro y depsues quisiera que el usuario ingresera una palabra da error... :/
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: No guarda la cadena dentro del vector
« Respuesta #3 en: 9 Febrero 2017, 22:47 pm »

No solo eso, sino que scanf y printf no funciona bien con char**.
En línea


ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: No guarda la cadena dentro del vector
« Respuesta #4 en: 9 Febrero 2017, 23:22 pm »

pero de todos modos si inicializara con el vector+1 con perro y depsues quisiera que el usuario ingresera una palabra da error... :/

No se debe modificar una cadena literal ("abc"). El comportamiento de esto no está definido. Hay compiladores que colocan la cadena en una zona de memoria de solo-lectura, por ejemplo.

Para leer nuevos datos, tendrás que reservar nueva memoria.

Por cierto, depende de las necesidades pero, también se puede hacer esto con un array:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char str[50];
  5.  
  6.    scanf("%s", str);
  7.  
  8.    printf("%s", str);
  9. }
En línea

7emiliosk8

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Re: No guarda la cadena dentro del vector
« Respuesta #5 en: 9 Febrero 2017, 23:29 pm »

No se debe modificar una cadena literal ("abc"). El comportamiento de esto no está definido. Hay compiladores que colocan la cadena en una zona de memoria de solo-lectura, por ejemplo.

Para leer nuevos datos, tendrás que reservar nueva memoria.

Por cierto, depende de las necesidades pero, también se puede hacer esto con un array:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char str[50];
  5.  
  6.    scanf("%s", str);
  7.  
  8.    printf("%s", str);
  9. }

De lo primero no tenia idea que no se pued modiifcar una cadena definida como "cosa" pero si se puede hacer es pedir un scanf para una cadena y luego volver a pedir otro scanf para la misma cadena y ahi que si se reemplace ?

y de lo segundo que me dijiste de este codigo
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char str[50];
  5.  
  6.    scanf("%s", str);
  7.  
  8.    printf("%s", str);
  9. }

Tu pusiste , "por ciento tambien se puede trabajar asi" pero yo en verdad siempre los trabajo asi XD , cual seria la otra forma de leerlo completo e imprimirlo completo ?
ojala me entiendas hermano, saludos!
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: No guarda la cadena dentro del vector
« Respuesta #6 en: 9 Febrero 2017, 23:40 pm »

De lo primero no tenia idea que no se pued modiifcar una cadena definida como "cosa" pero si se puede hacer es pedir un scanf para una cadena y luego volver a pedir otro scanf para la misma cadena y ahi que si se reemplace ?
Oh sí. La única peculiaridad es la de la constante. A parte de eso, eres libre.

Tu pusiste , "por ciento tambien se puede trabajar asi" pero yo en verdad siempre los trabajo asi XD , cual seria la otra forma de leerlo completo e imprimirlo completo ?
ojala me entiendas hermano, saludos!

Como en los códigos de arriba lo hicisteis todo con malloc, pues por si acaso xD

¿Leerlo completo e imprimirlo completo? No entiendo. scanf va a leer la entrada del usuario completa y printf va a imprimir la variable completa (hasta el '\0', claro).
En línea

7emiliosk8

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Re: No guarda la cadena dentro del vector
« Respuesta #7 en: 9 Febrero 2017, 23:59 pm »

Oh sí. La única peculiaridad es la de la constante. A parte de eso, eres libre.

cual seria la constante hermano ?

Citar
Como en los códigos de arriba lo hicisteis todo con malloc, pues por si acaso xD

ah jajaj Tu dices para haberlo hecho asi como dices tu adentro del for?

Código
  1. int main()
  2. {
  3. int i,j;
  4. char *vector[50];
  5.  
  6. vector = (char**)malloc(2*sizeof(char*));
  7.  
  8. for(i=0; i<2; i++)
  9.    {
  10.        printf("Ingrese una palabra: ");
  11.        scanf("%s",vector[i]);
  12.    }
  13.  

 en vez de haber pedido memoria con malloc asi ?

Código
  1. int main()
  2. {
  3. int i,j;
  4. char **vector;
  5.  
  6. vector = (char**)malloc(2*sizeof(char*));
  7.  
  8. for(i=0; i<2; i++)
  9.    {
  10.        vector[i] = (char*)malloc(100*sizeof(char));
  11.        printf("Ingrese una palabra: ");
  12.        scanf("%s",*(vector+i));
  13.    }
  14.  

:P, otra cosa, no se como funcione este foro, pero no hay manera de darte puntos o algo xd ? tus respuestas siempre me resuelven las dudas que tengo ::)
« Última modificación: 10 Febrero 2017, 00:00 am por 7emiliosk8 » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: No guarda la cadena dentro del vector
« Respuesta #8 en: 10 Febrero 2017, 00:05 am »

cual seria la constante hermano ?
Lo de "hola".


ah jajaj Tu dices para haberlo hecho asi como dices tu adentro del for?

Código
  1. int main()
  2. {
  3. int i,j;
  4. char *vector[50];
  5.  
  6. vector = (char**)malloc(2*sizeof(char*));
  7.  
  8. for(i=0; i<2; i++)
  9.    {
  10.        printf("Ingrese una palabra: ");
  11.        scanf("%s",vector[i]);
  12.    }
  13.  

 en vez de haber pedido memoria con malloc asi ?

Código
  1. int main()
  2. {
  3. int i,j;
  4. char **vector;
  5.  
  6. vector = (char**)malloc(2*sizeof(char*));
  7.  
  8. for(i=0; i<2; i++)
  9.    {
  10.        vector[i] = (char*)malloc(100*sizeof(char));
  11.        printf("Ingrese una palabra: ");
  12.        scanf("%s",*(vector+i));
  13.    }
  14.  
No no, osea, o con array [N] o con malloc. Me refiero a que comenté lo del array porque solo os vi haciéndolo con malloc, como otra posibilidad.
Sí que se podría hacer con char vector[2][50].

:P, otra cosa, no se como funcione este foro, pero no hay manera de darte puntos o algo xd ? tus respuestas siempre me resuelven las dudas que tengo ::)
No es ese tipo de foros :P Pero lo anoto en mi libreta de puntos imaginarios :D
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: No guarda la cadena dentro del vector
« Respuesta #9 en: 10 Febrero 2017, 16:35 pm »

No no, osea, o con array [N] o con malloc. Me refiero a que comenté lo del array porque solo os vi haciéndolo con malloc, como otra posibilidad.
Sí que se podría hacer con char vector[2][50].

De hecho para ese tipo de estructuras, me parece mucho mejor trabajarlo con matrices.
En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines