He estado trabajando en un proyecto en C que requiere que juegue mucho con las cadenas. Normalmente, programo en C++, así que esto es un poco diferente a simplemente decir string.empty().
Me pregunto cuál sería la forma correcta de vaciar una cadena en C. ¿Sería esta?
buffer[80] = "Hello World!\n";
// ...
strcpy(buffer, "");
Depende de lo que entiendas por “vacío”. Si solo desea una cadena de longitud cero, entonces su ejemplo funcionará.
Esto también funcionará:
buffer[0] = '\0';
Si desea poner a cero todo el contenido de la cadena, puede hacerlo de esta manera:
memset(buffer,0,strlen(buffer));
pero esto solo funcionará para poner a cero hasta el primer carácter NULL.
Si la cadena es una matriz estática, puede usar:
memset(buffer,0,sizeof(buffer));
Otras dos formas son strcpy(str, "");
y string[0] = 0
Para eliminar realmente el contenido de la variable (en caso de que tenga un código sucio que no funcione correctamente con los fragmentos de código anteriores: P), use un ciclo como en el ejemplo a continuación.
#include <string.h>
...
int i=0;
for(i=0;i<strlen(string);i++)
{
string[i] = 0;
}
En caso de que desee borrar una matriz de caracteres asignada dinámicamente desde el principio, puede usar una combinación de malloc() y memset() o, y esto es mucho más rápido, calloc() que hace lo mismo que malloc pero inicializando toda la matriz con Null.
Por fin quiero que tengas en mente tu tiempo de ejecución. Aún más, si está manejando matrices enormes (6 dígitos y más), debe intentar establecer el primer valor en Nulo en lugar de ejecutar memset() a través de toda la cadena.
Puede parecer más sucio al principio, pero es mucho más rápido. Solo necesita prestar más atención a su código;)
Espero que esto haya sido útil para alguien;)
Depende de lo que entiendas por vaciar. Si solo quieres una cadena vacía, puedes hacerlo
buffer[0] = 0;
Si desea establecer cada elemento a cero, haga
memset(buffer, 0, 80);
Si está tratando de borrar un búfer de recepción para algo que recibe cadenas, he encontrado que la mejor manera es usar memset como se describe anteriormente. La razón es que no importa qué tan grande sea la siguiente cadena recibida (limitada al tamaño del búfer, por supuesto), automáticamente será una cadena asciiz si se escribe en un búfer que ha sido puesto a cero previamente.
Soy un principiante pero… Hasta donde yo sé, la mejor manera es
strncpy(dest_string,"",strlen(dest_string));

Denés Borsos
necesita el nombre de la cadena y su longitud pondrá a cero todos los caracteres; otros métodos podrían detenerse en el primer cero que encuentren
void strClear(char p[],u8 len){u8 i=0;
if(len){while(i<len){p[i]=0;i++;}}
}
Tu ejemplo es confuso. Aparentemente, el búfer se ha declarado en otro lugar e intenta inicializarlo desde un literal. No hay necesidad de borrar nada aquí.
– pmr
12 de noviembre de 2011 a las 21:55
string.empty() no modifica la cadena
–David Heffernan
12 de noviembre de 2011 a las 21:57