Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

366
Views
En C, ¿por qué no se puede cambiar el valor de una variable de puntero a carácter después de haberla asignado?

No entiendo la diferencia entre este caso:

 #include <stdio.h> int main() { int i = 0; i = 1; return 0; }

Y este caso:

 #include <stdio.h> int main() { char *mychar = "H"; *mychar = "E"; return 0; }

Lo que produce la advertencia del compilador "la asignación hace un número entero desde el puntero sin conversión".

¿No debería *mychar = "E" desreferenciar mychar para asignarle el valor de "E"?

Muchas gracias.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Has confundido algunas cosas.

  • Tenga en cuenta que "E" es en realidad const char[] que almacena 'E' y '\0' . No es un solo personaje. Para caracteres individuales usa '', como 'E' .
  • mychar apunta al literal de cadena y no puede cambiar los literales de cadena.

Si lo que tenías en mente es esto:

 char *mychar = "H"; mychar = "E";

Esto está bien, no está cambiando el literal de cadena, solo la primera vez que el puntero mychar apunta al literal de cadena "H", luego a "E".

Esto no lo puedes hacer:

 char *mychar = "Hello"; *mychar = 'E'; // Can't modify the string literal

Pero esto lo puedes hacer:

 char c = 0; char *mychar = &c; *mychar = 'E'; // This is ok
over 4 years ago · Santiago Trujillo Report

0

"E" es un literal de cadena (char*) y 'E' es un literal char (char).

Tenga en cuenta que las dos piezas de código que está comparando no son análogas. La diferencia entre las dos piezas de código (int vs char*) será más clara si escribes

 char* mychar = "H"; *mychar = "E";

El tipo correspondiente al ejemplo int es (char*). Es decir, el código que es análogo al ejemplo "int" es

 char* mychar = "H"; mychar = "E";
over 4 years ago · Santiago Trujillo Report

0

Los literales de cadena pueden almacenarse en la sección de memoria de solo lectura. La modificación de un literal de cadena invoca un comportamiento indefinido. No puedes modificarlo.

Agregue el calificador const para que su compilador sepa que la cadena no es modificable

 char const *mychar = "H";

También debe tener en cuenta que la declaración

 *mychar = "E";

está mal por sí mismo. Está asignando un tipo char * a char .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!