c++ - lenguaje - Asignar un literal de cadena a un char*
leer cadena de caracteres en c (3)
En su segundo ejemplo, debe asegurarse de no intentar modificar la cadena apuntada por pc2
.
Si necesita modificar la cadena, existen varias alternativas:
Haga una copia asignada dinámicamente del literal (no olvide
free()
cuando termine):char *pc3 = strdup("test string"); /* or malloc() + strcpy() */
Use una matriz en lugar de un puntero:
char pc4[] = "test string";
Posible duplicado:
¿Cómo deshacerse de ladeprecated conversion from string constant to ''char*''
advertenciasdeprecated conversion from string constant to ''char*''
en GCC?
Esta asignación:
char *pc1 = "test string";
me da esta advertencia:
advertencia: conversión obsoleta de cadena constante a ''char *''
mientras que este parece estar bien:
char *pc2 = (char*)("test string");
¿Es esta una mejor manera de proceder?
Notas: por otras razones, no puedo usar un const char*
.
Eso depende de si necesita modificar la cadena literal o no. En caso afirmativo,
char pc1[] = "test string";
Un literal de cadena es un const char[]
en C ++, y puede almacenarse en una memoria de solo lectura para que su programa se bloquee si intenta modificarlo. Señalar un puntero no const es una mala idea.