Inicializa una cadena en C para vaciar la cadena

Quiero inicializar la cadena en C para vaciar la cadena. Lo intenté:

string[0] = ""; 

pero escribio

 "warning: assignment makes integer from pointer without a cast" 

¿Cómo debo hacerlo entonces?

Suponiendo que su matriz llamada ‘cadena’ ya existe, intente

 string[0] = '\0'; 

\0 es el terminador NUL explícito, requerido para marcar el final de la cadena.

Desea establecer el primer carácter de la cadena en cero, así:

 char myString[10]; myString[0] = '\0'; 

(O myString[0] = 0; )

O, en realidad, en la inicialización, puedes hacer:

 char myString[10] = ""; 

Pero esa no es una forma general de establecer una cadena en longitud cero una vez que se ha definido.

Además de la versión de Will Dean, lo siguiente es común para la inicialización de todo el búfer:

 char s[10] = {'\0'}; 

o

 char s[10]; memset(s, '\0', sizeof(s)); 

o

 char s[10]; strncpy(s, "", sizeof(s)); 

La asignación de literales de cadena a la matriz char solo se permite durante la statement:

 char string[] = ""; 

Esto declara la cadena como una matriz de caracteres de tamaño 1 y la inicializa con \0 .

Intenta esto también:

 char str1[] = ""; char str2[5] = ""; printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5 

calloc asigna la memoria solicitada y le devuelve un puntero. También establece la memoria asignada a cero.

En caso de que esté planeando usar su string como una cadena vacía todo el tiempo:

 char *string = NULL; string = (char*)calloc(1, sizeof(char)); 

En caso de que esté planeando almacenar algo de valor en su string más adelante:

 char *string = NULL; int numberOfChars = 50; // you can use as many as you need string = (char*)calloc(numberOfChars + 1, sizeof(char)); 
 string[0] = ""; 
  "advertencia: la asignación crea un entero desde el puntero sin una conversión 

Ok, vamos a sumergirnos en la expresión …

0 un int: representa el número de caracteres (asumiendo que la string es (o está en descomposición) un carácter *) para avanzar desde el principio de la string objeto

string[0] : el objeto char ubicado al principio de la string objeto

"" : cadena literal: un objeto de tipo char[1]

= : operador de asignación: intenta asignar un valor de tipo char[1] a un objeto de tipo char . char[1] (decayed to char* ) y char no son compatibles con la asignación, pero el comstackdor confía en usted (el progtwigdor) y continúa con la asignación de todos modos al emitir el tipo char* (a qué char[1] decae) ​​a un int — y recibe la advertencia como un bono. Tienes un comstackdor muy bonito 🙂

Creo que 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, puede hacerlo:

 // 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 ha creado una matriz de longitud cero, en lugar de una matriz de longitud 1.

Una cadena es una serie de caracteres seguidos por un terminador de cadena ( '\0' ). Una cadena vacía ( "" ) no consta de caracteres seguidos de un solo carácter terminador de cadena, es decir, un carácter en total.

Así que intentaría lo 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.