Quiero inicializar la cadena en C para vaciar la cadena. Traté:Inicialice una cadena en C para vaciar la cadena
string[0] = "";
pero escribí
"warning: assignment makes integer from pointer without a cast"
¿Cómo debo hacer entonces?
Quiero inicializar la cadena en C para vaciar la cadena. Traté:Inicialice una cadena en C para vaciar la cadena
string[0] = "";
pero escribí
"warning: assignment makes integer from pointer without a cast"
¿Cómo debo hacer entonces?
Asumiendo que su matriz llamada 'cadena' ya existe, intente
string[0] = '\0';
\0
es el terminador NULL explícita, requerido para marcar el final de la cadena.
Semnatically, debería ser 'string [0] = '\ 0';' ... –
@badgerr: ¿podría cambiar su respuesta para usar ''\ 0''? – pevik
que desea establecer el primer carácter de la cadena a cero, como esto:
char myString[10];
myString[0] = '\0';
(O myString[0] = 0;
)
O, en realidad, en la inicialización, puede hacerlo:
char myString[10] = "";
Pero esa no es una manera general de establecer una cadena a una longitud cero una vez que se ha definido.
Asignación de cadenas literales a char matriz sólo se permite durante la declaración:
char string[] = "";
Esto declara cadena como una matriz de caracteres de tamaño 1 y lo inicializa con \0
.
Pruebe esto también:
char str1[] = "";
char str2[5] = "";
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
Además de la versión de Will Dean, los siguientes son comunes para toda la inicialización de búfer:
char s[10] = {'\0'};
o
char s[10];
memset(s, '\0', sizeof(s));
o
char s[10];
strncpy(s, "", sizeof(s));
string[0] = "";
"warning: assignment makes integer from pointer without a cast
Ok, vamos a bucear en la expresión ...
0
un int: representa el número de caracteres (suponiendo string
es (o decaído en) un char *) para avanzar desde el principio del objeto string
string[0]
: el objeto char
situado al principio de la objetar string
""
: cadena literal: un objeto de tipo char[1]
=
: asignación de operadora: tries para asignar un valor de tipo char[1]
a un objeto del tipo char
. char[1]
(decayed to char*
) y char
no son compatibles con la asignación, pero el compilador confía en usted (el programador) y sigue adelante con la asignación de todos modos al convertir el tipo char*
(char[1]
decayed a) en int
--- y obtiene el advertencia como una bonificación. Tiene un compilador muy bueno :-)
calloc
asigna la memoria solicitada y le devuelve un puntero. También establece la memoria asignada a cero.
En caso de que va a utilizar su string
cadena como vacío todo el tiempo:
char *string = NULL;
string = (char*)calloc(1, sizeof(char));
En caso de que va a almacenar algún valor en su string
más tarde:
char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));
creo Amarghosh respondió correctamente. Si desea inicializar una cadena vacía (sin saber el tamaño) la mejor manera es:
//this will create an empty string without no memory allocation.
char str[]="";// it is look like {0}
Pero si desea inicializar una cadena con una asignación de memoria fija que puede hacer:
// this is better if you know your string size.
char str[5]=""; // it is look like {0, 0, 0, 0, 0}
¡Es un poco tarde, pero creo que su problema puede ser que haya creado una matriz de longitud cero, en lugar de una matriz de longitud 1.
Una cadena es una serie de caracteres seguida de un terminador de cadena ('\0'
). Una cadena vacía (""
) no consta de caracteres seguidos de un único carácter de terminación de cadena, es decir, un carácter en total.
Así que me gustaría probar el siguiente:
string[1] = ""
Tenga en cuenta que este comportamiento no es el emulado por strlen
, que no cuenta el terminador como parte de la longitud de la cadena.
¿Cuál es el punto de declarar una cadena de 0 caracteres? – cdhowie
¿Cuál es el tipo de su 'cadena'? ¿Es un puntero de char o una matriz de char? – nos
¿Qué es 'cadena'? – leppie