2011-11-12 16 views
31

He estado trabajando en un proyecto en C que me obliga a jugar mucho con cadenas. Normalmente, programo en C++, así que esto es un poco diferente a solo decir string.empty().Forma correcta de vaciar una C-String

Me pregunto cuál sería la forma correcta de vaciar una cuerda en C. ¿Sería esto?

 
buffer[80] = "Hello World!\n"; 

// ... 

strcpy(buffer, ""); 
+0

Su ejemplo es confuso. Aparentemente el buffer ha sido declarado en otro lugar e intentas inicializarlo desde un literal. No hay necesidad de borrar nada aquí. – pmr

+1

string.empty() no modifica la cadena –

Respuesta

55

Depende de lo que entendemos por "vacío". Si solo quieres una cadena de longitud cero, entonces tu ejemplo funcionará.

Esto también funciona:

buffer[0] = '\0'; 

Si desea poner a cero el contenido completo de la cadena, puede hacerlo de esta manera:

memset(buffer,0,strlen(buffer)); 

pero esto sólo funcionará para poner a cero hasta al primer personaje NULL

Si la cadena es una matriz estática, se puede usar: Los

memset(buffer,0,sizeof(buffer)); 
+2

Para aclarar, el último método funcionará si 'buffer' es una matriz, pero no si se trata de un puntero. El compilador debe poder ver el tamaño de la matriz.Si 'buffer' es un puntero, solo pondrá a cero el tamaño de un puntero, probablemente 4 u 8 bytes. –

1

Depende de lo que quiere decir vaciar. Si lo que desea es una cadena vacía, se puede hacer

buffer[0] = 0; 

Si desea establecer todos los elementos a cero, hacer

memset(buffer, 0, 80); 
2

Dos formas son strcpy(str, ""); y string[0] = 0

Para eliminar realmente los contenidos de las variables (en caso de tener código sucia que no es funciona correctamente con los fragmentos arriba: P) utiliza un bucle 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 desea borrar una matriz dinámica asignada de caracteres desde el principio, puede utilizar 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 nulo.

Por fin quiero que tengas tu tiempo de ejecución en mente. Más aún, si maneja matrices enormes (6 dígitos o 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. Sólo tiene que prestar más atención en su código;)

Espero que esto era útil para nadie;)

0

nombre necesidades de cuerda y su longitud pondrá a cero todos los caracteres otras métodos podrían parar en el primer cero se encuentran con

void strClear(char p[],u8 len){u8 i=0; 
     if(len){while(i<len){p[i]=0;i++;}} 
    } 
Cuestiones relacionadas