c++ - Conversión obsoleta de cadena literal a ''char*''
string deprecated (3)
Estas respuestas son todas correctas.
Tenga en cuenta que si tiene una función que requiere una matriz de caracteres como argumento y pasa este argumento de la siguiente manera:
foo ("bar");
Se mostrará la misma advertencia. En este caso, puede:
1) Cámbielo así, como se explica en la primera respuesta:
void foo (char[] str) { printf(str); }
const char param[] = "bar";
foo (param);
2) Considera usar una cadena estándar de C ++, así:
void foo (std::string theParam) { std::cout << theParam; }
foo ("bar");
En mi humilde opinión, siempre que no se trate de un problema de rendimiento real y no esté trabajando con bibliotecas C, o si está creando una biblioteca C ++ para que otros la usen, debería trabajar con cadenas inmutables C ++ y su conjunto de características.
Si Unicode es un requisito, el soporte en C ++ es "terrible" como se explica here . Esta pregunta le brinda algunas pistas (principalmente: use la biblioteca de IBM ICU). Si ya tiene Qt en su proyecto, QString
también hará el truco, y también lo hará Gettext.
Tengo un programa que declara una serie de cadenas como esta:
char *colors[4] = {"red", "orange", "yellow", "blue"};
Pero me sale la advertencia del compilador anterior. Se compila, pero prefiero usar la forma no desaprobada (si hay una). He intentado averiguar qué significa, pero parece que no puedo resolverlo. He escuchado el uso de ''const'' antes de que ''char'' funcione, pero sería útil si alguien pudiera explicar qué significa el error. Gracias.
Las cadenas que ingresa: "rojo", "organge", etc. son "literales", porque están definidas dentro del código del programa (no se leen directamente desde el disco, la entrada de usuario / stdin, etc.).
Esto significa que si en algún momento intenta escribir en sus colors
, tendrá acceso directo a su entrada original y, por lo tanto, la editará. Esto causaría algunos errores de tiempo de ejecución no deseados.
Declararlo como una constante se asegurará de que nunca intentará escribir en este puntero y se evitará un error de tiempo de ejecución.
const char *colors[4] = {"red", "orange", "yellow", "blue"};
Si alguna vez tiene ganas de editar estos valores en tiempo de ejecución, primero debe copiar las cadenas.
"red", "orange", "yellow", "blue"
estas son cadenas constantes Crear un puntero no constante a una cadena constante es incorrecto, por lo tanto, la advertencia. En este momento está recibiendo una advertencia, pero debería ser un error ya que está en desuso en c ++ 03, y prohibido en c ++ 11.