Actualmente estoy escribiendo un pequeño programa, pero sigo recibiendo este error al compilar
error: constante de carácter vacío
Me doy cuenta de que es porque estoy tratando de reemplazar un carácter válido con un espacio vacío, c[i]=''
pero no he podido encontrar otra forma de representarlo.
c[i]
con un espacio en blanco , o desea "eliminar" ese carácter de la matriz como lo haría en un editor cuando presiona la tecla de retroceso (es decir, desea los caracteres c [i-1] yc [ i + 1] para volverse adyacentes después de la operación)?char c[5] = "";
cadena vacía, perochar c = '';
no es válida como se explica a continuación en las 6 respuestas.Respuestas:
Puede usar
c[i]= '\0'
o simplementec[i] = (char) 0
.El carácter nulo / vacío es simplemente un valor de cero, pero también se puede representar como un carácter con un cero de escape.
fuente
'\0'
es el carácter nulo que no tiene nada que ver conNULL
; el carácter nulo es simplemente un carácter que tiene 0 como código numérico.null char
debería sernul char
solterol
.No puede almacenar "ningún carácter" en un carácter, no tiene sentido.
Como alternativa, puede almacenar un carácter que tenga un significado especial para usted, por ejemplo, carácter nulo
'\0'
, y tratarlo de manera especial.fuente
""
porque una cadena es una secuencia de cero o más caracteres, pero un carácter es exactamente un valor, ni cero ni más.El carácter de espacio vacío sería
' '
. Si está buscando un valor nulo, sería'\0'
.fuente
Sí,
c[i]=''
no es un código válido. Entre paréntesis, carácter constante entre'
'
, por ejemplo,c[i] = 'A';
charA
. pero no escribe ningún carácter en el medio''
.El espacio vacío no es más que suponga que si desea un espacio asignado, haga lo siguiente:
c[i] = ' '; // ^ space
si quiere ser asignado
nul char
, haga:c[i] = '\0'; // ^ null symbol
Ejemplo: suponga que si
c[]
una cadena (\0
matriz de caracteres terminada en nul ) si tiene una cadena. por ejemplo:char c[10] = {'a', '2', 'c', '\0'};
Y reemplaza el segundo carácter con espacio :
c[1] = ' ';
y si lo imprime usando printf de la siguiente manera:
printf("\n c: %s", c);
entonces la salida sería:
c: a c // ^ space printed
Y reemplaza el segundo carácter con '\ 0' :
c[1] = '\0';
entonces la salida sería:
porque la cadena terminó con
\0
.fuente
No existe el "carácter vacío"
''
.Si necesita un carácter de espacio, que se puede representar como un espacio:
c[i] = ' '
o como su equivalente octal ASCII:c[i] = '\040'
. Si necesitas un personaje NUL, eso esc[i] = '\0'
.fuente
Para representar el hecho de que el valor no está presente, tiene dos opciones:
1) Si todo el
char
rango es significativo y no puede reservar ningún valor, utilice enchar*
lugar dechar
:char** c = new char*[N]; c[0] = NULL; // no character *c[1] = ' '; // ordinary character *c[2] = 'a'; // ordinary character *c[3] = '\0' // zero-code character
Entonces tendrás
c[i] == NULL
para cuando el personaje no esté presente y de lo contrario*c[i]
para personajes ordinarios.2) Si no necesita algunos valores representables
char
, reserve uno para indicar que el valor no está presente, por ejemplo, el'\0'
carácter.char* c = new char[N]; c[0] = '\0'; // no character c[1] = ' '; // ordinary character c[2] = 'a'; // ordinary character
Entonces tendrás
c[i] == '\0'
para cuando el personaje no esté presente y los personajes ordinarios de lo contrario.fuente
Hay dos formas de hacer la misma instrucción, es decir, una cadena vacía. La primera forma es asignar una cadena vacía en la memoria estática:
char* my_variable = "";
o, si quieres ser explícito:
char my_variable = '\0';
La forma publicada arriba es solo para un personaje. Y, la segunda forma:
#include <string.h> char* my_variable = strdup("");
No olvides usar free () con este porque strdup () usa malloc dentro.
fuente
Puede resultar útil asignar un valor nulo en una cadena en lugar de convertir explícitamente algún índice en el carácter nulo
'\0'
. Lo he usado para probar funciones que manejan cadenas, asegurándose de que se mantengan dentro de sus límites apropiados.Con:
char test_src[] = "fuu\0foo";
Esto crea una matriz de tamaño 8 con valores:
{'f', 'u', 'u', '\0', 'f', 'o', 'o', '\0'}
fuente
Donde EMPTY_SPACE = "" (esto es String) TAB = '\ t' (esto es Character)String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;
String after = before.replaceAll(" ", "").replace('\t', '\0');
significa después = "palabra"fuente