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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  copiar caracteres uno a uno
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: copiar caracteres uno a uno  (Leído 8,004 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #10 en: 23 Mayo 2015, 19:16 pm »

y si uso memset estaria correcto ?  la mayoria de codigo que me entregaron aqui inicializa los punteros con eso , el codigo es c++ pero no puedo usar new y me dijeron que me olvide de malloc q no funciona  :'(


En línea

gracias por responder mis dudas
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: copiar caracteres uno a uno
« Respuesta #11 en: 23 Mayo 2015, 19:23 pm »

memset no reserva memoria, malloc la reserva pero no la inicializa, calloc la reserva y inicializa a 0.


En línea

Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #12 en: 23 Mayo 2015, 20:32 pm »

Stackewinner, el puntero debe ser constante por que el estándar lo dice, punto. No puedes modificar una cadena de bajo nivel. Punto.

Ahora, ¿por qué el estándar es tan tajante? ¿Por qué tantos "puntos"? Bueno, tiene un motivo relacionado con cómo se implementan tales cadenas.

Un ejecutable, cuando se coloca en memoria, está divido en varias secciones: una es la sección de código (la famosa `.text` en ensamblador), que es donde va el código de la aplicación. Luego dispone de una pila (variables locales, el stack), y un montículo (variables dinámicas -malloc y demás, el heap). Luego hay dos secciones más (que no recuerdo sus nombres), donde van las variables globales inicializadas, y otra donde van las variables globales sin inicializar. El lugar donde van las variables globales sin inicializar es una sección que se inicializa a cero al comenzar el programa (o al menos en Linux; creo que si un SO dado no se divide en tales secciones, el compilador está obligado a inicializar a cero dichas variables globales para emular el comportamiento).

Y por último, está la sección `.rodata`. Ahí es donde van todas las variables globales constantes, y los literales de cadena (es decir, toda cadena de bajo nivel que escribas en tu código fuente irá a esa sección). Si intentas modificar dicha sección (dado que es constante), a través de un puntero por ejemplo, se producirá segmentation fault y el programa se cerrará.

Y por ese motivo, las cadenas son constantes por defecto (`char const*`), porque no se pueden modificar, al estar dentro de la sección constante de tu programa, y que está protegida por el sistema operativo. Si intentas hacerte el listo y modificarlas sí o sí:

Código
  1. char const* str = "cadena de bajo nivel";
  2. void* str_void = str;
  3. char* str = (char*)str_void;
  4. str[1] = 'A';

Ocurrirá lo que he dicho antes, segmentation fault.
« Última modificación: 23 Mayo 2015, 20:36 pm por Peregring-lk » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: copiar caracteres uno a uno
« Respuesta #13 en: 23 Mayo 2015, 21:06 pm »

Le pregunte eso porque el había declarado "char*" en vez de "const char*" y luego dijo
Citar
el compilador me da un error cuando trato de compilar con una buffer o char * no constante
pero no preguntaba por nada especial...

Entendiste mal, bueno, no pasa nada.
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #14 en: 23 Mayo 2015, 22:31 pm »

Stakewinner00 fue mal formulada mi pregunta disculpa !!

Peregring-lk eso es lo que me pasa
En línea

gracias por responder mis dudas
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #15 en: 23 Mayo 2015, 23:02 pm »

Perdón Stackewinner0. De todas formas, pensé que era "el autor de éste hilo" (en éste caso bash) quién había hecho esa pregunta (no me fijo mucho en quién es quién la verdad).
En línea

Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #16 en: 24 Mayo 2015, 01:03 am »

Código
  1. int cantidadDigitos= string.length();
  2.  
  3. for (int i=1; i <= cantidadDigitos;cantidadDigitos++)
  4. {
  5.    despues depende pero, cantidadDigitos[i];
  6. }
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #17 en: 24 Mayo 2015, 06:23 am »

me imagino que no es posible con tan limitadas opciones pero me imagino que en otro contexto se podra , ejejeej gracias aprendi algo

la verdad me esta gustando mas esto

una pregunta del mismo tema que ocuparia cada caracter (tamano)?
En línea

gracias por responder mis dudas
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: copiar caracteres uno a uno
« Respuesta #18 en: 24 Mayo 2015, 06:57 am »

sizeof(char) == 1. El estándar no dice que ésto signifique un byte: para el estándar, un `char`es la unidad mínima de memoria, y por defecto `sizeof(char) == 1`, y cualquier otro tipo se mide en X veces un char. Así, `sizeof(int) == 4` significa que un `int` ocupa lo mismo que 4 `char`s (`char[4]`).

Cuánto ocupe en bytes un `char`se deja a mano del compilador, pero es universalmente 1 y no te vas a encontrar un contraejemplo.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: copiar caracteres uno a uno
« Respuesta #19 en: 24 Mayo 2015, 13:09 pm »

y si uso memset estaria correcto ?  la mayoria de codigo que me entregaron aqui inicializa los punteros con eso , el codigo es c++ pero no puedo usar new y me dijeron que me olvide de malloc q no funciona  :'(

No, es incorrecto, si tu puntero es indefinido y se lo pasas a memset lo que estas haciendo es escribir en una direccion indefinida, por eso tu programa genera excepciones no controladas. Usa la pila aunque eso de que malloc no funciona es un delirio ...

Un buen compilador como VC++ genera una advertencia:
d:\src\malo.cpp(10) : warning C4700: uninitialized local variable 'szCopia' used
« Última modificación: 24 Mayo 2015, 13:11 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Caracteres a-z A-Z 0-9
Programación Visual Basic
Kizar 5 2,427 Último mensaje 22 Enero 2006, 17:43 pm
por Kizar
copiar caracteres en una cadena « 1 2 3 »
Programación C/C++
mapers 22 21,956 Último mensaje 9 Julio 2010, 05:15 am
por mapers
Alguien sabe buscar palabra de x caracteres y los demás caracteres a continuació
Programación Visual Basic
usuario oculto 3 5,030 Último mensaje 2 Agosto 2010, 18:36 pm
por Psyke1
[C] Copiar arreglo de caracteres con Operador Igual
Programación C/C++
AlbertoBSD 8 4,171 Último mensaje 25 Junio 2016, 11:40 am
por fary
Copiar caracteres
Programación C/C++
Dato Vagabundo 3 2,364 Último mensaje 5 Octubre 2017, 03:51 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines