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)
| | |-+  reemplazar caracter en cadena en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: reemplazar caracter en cadena en C  (Leído 6,028 veces)
el_dorado

Desconectado Desconectado

Mensajes: 4


Ver Perfil
reemplazar caracter en cadena en C
« en: 2 Julio 2021, 19:51 pm »

Hola y buenas a todos.

he empezado hace poco con C y me he encontrado con el siguiente problema. quiero sustituir un caracter por otro dentro de una cadena. Lo he intentado de la siguiente manera.

Código
  1. int main(){
  2.  
  3.     char* x = "abc1efg";
  4.     x[3] = 'd';
  5.     return 0;
  6.  
  7. }
  8.  
  9.  

cuando lo compilo no hay problema pero a la hora de ejecutarlo me salta "violacion del segmento ('core' generado)".

PD: primer post  ;D


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: reemplazar caracter en cadena en C
« Respuesta #1 en: 2 Julio 2021, 20:25 pm »

Código:
char* x = "abc1efg";

http://c-faq.com/decl/strlitinit.html

este modo es guardado como un arreglo estático de caracteres por eso da violación de segmento cuando intentas accederla en escritura

tendrías que declararlo
Código:
char x[] = "abc1efg";



En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: reemplazar caracter en cadena en C
« Respuesta #2 en: 2 Julio 2021, 21:14 pm »

Es cierto, es un arreglo estatico, Cuando un programa en C tiene chars constantes lo que se hace es, se les coloca en una zona de memoria de solo lectura

Código:
===== Memoria de Solo lectura =====
"abc1efg"
==========================

Y el apuntador *x
Código
  1. char* x = "abc1efg";

Esa operacion no es una copia sino una asignacion, basicamente dice que el apuntador x, apuntara a la direccion donde se encuentra la cadena abc1efg (Solo lectura)

Por lo que como te comentaron, al momento de tratar de editar esa zona da como resultado el fallo de segmento.

Si se cambia por

Código
  1. char x[] = "abc1efg";

tal como te dijieron la cosa cambia, son esas pequeñas sutilezas del lenguaje que no te enseñan en la escuela y tienes que aprender de mala manera.

Saludos


En línea

el_dorado

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: reemplazar caracter en cadena en C
« Respuesta #3 en: 3 Julio 2021, 18:38 pm »

Código:
char* x = "abc1efg";

http://c-faq.com/decl/strlitinit.html

este modo es guardado como un arreglo estático de caracteres por eso da violación de segmento cuando intentas accederla en escritura

tendrías que declararlo
Código:
char x[] = "abc1efg";



muchisimas gracias,es un cambio sutil pero que de dolor de cabeza me a dado AJAJAJJA   :xD :xD :xD
En línea

el_dorado

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: reemplazar caracter en cadena en C
« Respuesta #4 en: 3 Julio 2021, 18:40 pm »

Es cierto, es un arreglo estatico, Cuando un programa en C tiene chars constantes lo que se hace es, se les coloca en una zona de memoria de solo lectura

Código:
===== Memoria de Solo lectura =====
"abc1efg"
==========================

Y el apuntador *x
Código
  1. char* x = "abc1efg";

Esa operacion no es una copia sino una asignacion, basicamente dice que el apuntador x, apuntara a la direccion donde se encuentra la cadena abc1efg (Solo lectura)

Por lo que como te comentaron, al momento de tratar de editar esa zona da como resultado el fallo de segmento.

Si se cambia por

Código
  1. char x[] = "abc1efg";

tal como te dijieron la cosa cambia, son esas pequeñas sutilezas del lenguaje que no te enseñan en la escuela y tienes que aprender de mala manera.

Saludos





muchas gracias por la info. y tanto que se aprenden de mala manera BUAJAJJA :xD :xD :xD
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