Autor
|
Tema: No guarda la cadena dentro del vector (Leído 3,083 veces)
|
7emiliosk8
Desconectado
Mensajes: 73
|
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 printf("Ingrese una palabra: ");
si no las pongo funciona bien, pero yo quiero que el usuario pueda modificar ese "perro" que yo di. #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i,j,a; char **vector; vector = (char**)malloc(2*sizeof(char*)); *(vector) = "hola"; *(vector + 1) = "perro"; printf("Ingrese una palabra: "); puts("\nImprimiendo caracter a caracter:"); for(i=0;i<2;i++) { for(j=0; j<strlen(*(vector+i)) ; j++) { printf("%c",*(*(vector +i )+j )); } } puts("\nImprimiendo completo:"); return 0; }
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Me remito al siguiente post: http://stackoverflow.com/questions/14546018/using-scanf-function-with-pointers-to-charactercito: 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: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i; char** vector; vector = (char**)malloc(sizeof(char*)*2); // solo permite dos palabras, separadas por salto de linea o por espacio //*(vector) = "hola"; //*(vector + 1) = "perro"; printf("Ingrese una palabra: "); for(i=0; i<2; i++) { vector [i ] = (char*)malloc(sizeof(char)*100); // asumiendo que solo son palabras de máximo 100 cáracteres scanf("%s", &(*vector [i ])); } puts("\nImprimiendo:\n\n"); for(i=0; i<2; i++) { printf("\n%d: %s", i , vector [i ]); } for(i=0; i<2; i++) { } return 0; }
|
|
« Última modificación: 9 Febrero 2017, 22:27 pm por dato000 »
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
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
Mensajes: 3.034
|
No solo eso, sino que scanf y printf no funciona bien con char**.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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: #include <stdio.h> int main(){ char str[50]; }
|
|
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
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: #include <stdio.h> int main(){ char str[50]; }
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 #include <stdio.h> int main(){ char str[50]; }
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 73
|
Oh sí. La única peculiaridad es la de la constante. A parte de eso, eres libre.
cual seria la constante hermano ? 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? int main() { int i,j; char *vector[50]; vector = (char**)malloc(2*sizeof(char*)); for(i=0; i<2; i++) { printf("Ingrese una palabra: "); }
en vez de haber pedido memoria con malloc asi ? int main() { int i,j; char **vector; vector = (char**)malloc(2*sizeof(char*)); for(i=0; i<2; i++) { vector [i ] = (char*)malloc(100*sizeof(char)); printf("Ingrese una palabra: "); }
, 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
Mensajes: 3.412
ASMático
|
cual seria la constante hermano ?
Lo de "hola". ah jajaj Tu dices para haberlo hecho asi como dices tu adentro del for? int main() { int i,j; char *vector[50]; vector = (char**)malloc(2*sizeof(char*)); for(i=0; i<2; i++) { printf("Ingrese una palabra: "); }
en vez de haber pedido memoria con malloc asi ? int main() { int i,j; char **vector; vector = (char**)malloc(2*sizeof(char*)); for(i=0; i<2; i++) { vector [i ] = (char*)malloc(100*sizeof(char)); printf("Ingrese una palabra: "); }
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]. , 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 Pero lo anoto en mi libreta de puntos imaginarios
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Dimensionar un vector dentro de un struct
« 1 2 »
Programación C/C++
|
ShadowA7X
|
10
|
7,552
|
9 Noviembre 2014, 01:45 am
por ivancea96
|
|
|
[Resuelto] buscar la cadena '<?' dentro de otra cadena con javascript
Desarrollo Web
|
srccver
|
4
|
3,824
|
9 Abril 2015, 20:52 pm
por srccver
|
|
|
intercambiar valores dentro de un vector
Programación C/C++
|
bash
|
8
|
4,391
|
21 Enero 2016, 23:46 pm
por bash
|
|
|
[C++] (Consulta) ¿std::string guarda la cadena en el heap o en la pila?
Programación C/C++
|
class_OpenGL
|
7
|
3,077
|
10 Agosto 2016, 17:10 pm
por class_OpenGL
|
|
|
Vector de cadena de caracteres
Programación C/C++
|
NicolasPileci
|
2
|
2,511
|
13 Agosto 2019, 21:59 pm
por NicolasPileci
|
|