Advertencia de C ++: conversión en desuso de la constante de cadena a ‘char *’

Estoy usando gnuplot para dibujar un gráfico en C ++. El gráfico se traza como se esperaba pero hay una advertencia durante la comstackción. ¿Qué significa la advertencia?

warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] 

Esta es la función que estoy usando:

 void plotgraph(double xvals[],double yvals[], int NUM_POINTS) { char * commandsForGnuplot[] = {"set title \"Probability Graph\"", "plot 'data.temp' with lines"}; FILE * temp = fopen("data.temp", "w"); FILE * gnuplotPipe = popen ("gnuplot -persistent ", "w"); int i; for (i=0; i < NUM_POINTS; i++) { fprintf(temp, "%lf %lf \n", xvals[i], yvals[i]); //Write the data to a te mporary file } for (i=0; i < NUM_COMMANDS; i++) { fprintf(gnuplotPipe, "%s \n", commandsForGnuplot[i]); //Send commands to gn uplot one by one. } fflush(gnuplotPipe); } 

    Los literales de cadena son una matriz de const char , podemos ver esto desde el borrador de la sección estándar de C ++ 2.14.5 cadena que dice ( énfasis mío ):

    Los literales de cadena ordinarios y los literales de cadena UTF-8 también se conocen como literales de cadena estrecha. Un literal de cadena estrecha tiene el tipo “matriz de n const char” , donde n es el tamaño de la cadena como se define a continuación, y tiene una duración de almacenamiento estático (3.7).

    entonces este cambio eliminará la advertencia:

     const char * commandsForGnuplot[] = {"set title \"Probability Graph\"", "plot 'data.temp' with lines"}; ^^^^^ 

    Tenga en cuenta que permitir que * * no-const char ** apunte a datos const es una mala idea ya que modificar un const o un string literal es un comportamiento indefinido . Podemos ver esto yendo a la sección 7.1.6.1 Los cv-calificadores que dice:

    Excepto que cualquier miembro de la clase declarado mutable (7.1.1) se puede modificar, cualquier bash de modificar un objeto const durante su ciclo de vida (3.8) da como resultado un comportamiento indefinido.

    y la sección 2.14.5 literales que dice:

    Si todos los literales de cadena son distintos (es decir, se almacenan en objetos no superpuestos) se define la implementación. El efecto de intentar modificar un literal de cadena no está definido.