Estoy tratando de entender por qué el código siguiente es ilegal:cambiar una caracter en una cadena c
int main()
{
char *c = "hello";
c[3] = 'g'; // segmentation fault here
return 0;
}
Lo que está haciendo el compilador cuando encuentra char *c = "hello";
?
La manera en que yo entiendo, su una serie automática de carbón, y c
es un puntero al primer carácter. Si es así, c[3]
es como *(c + 3)
y debería poder realizar la tarea.
Sólo tratando de comprender la forma en que funciona el compilador.
** las matrices no son punteros ** y ** los punteros no son matrices **. El literal de cadena ('" hello "') es una matriz de 6 caracteres (cuente el terminador nulo). Lea la sección 6 de [comp.lang.c faq] (http://c-faq.com/). Una vez que haya hecho eso, lea las otras secciones también :) – pmg
Duplicado de muchos para enumerar aquí. –
Necesitamos introducir un filtro en el código de la pregunta SO que detecta 'char * XX =" ... "' y proporciona la respuesta allí y luego, en línea en el cuadro de diálogo preguntar pregunta. –