Tenga una matriz de caracteres como miembros char [255]. ¿Cómo puedo vaciarlo completamente sin usar un bucle?
char members[255];
Por "vacío" me refiero a que si tenía algunos valores almacenados, entonces no debería. Por ejemplo, si hago strcat, el valor anterior no debería permanecer
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
string
. Para "vaciar" una cadena, establezca su primer elemento en '\ 0':members[0] = '\0';
Respuestas:
utilizando
memset(members, 0, 255);
en general
memset(members, 0, sizeof members);
si la matriz está dentro del alcance, o
memset(members, 0, nMembers * (sizeof members[0]) );
si solo tiene el valor del puntero y nMembers es el número de elementos de la matriz.
EDITAR Por supuesto, ahora el requisito ha cambiado de la tarea genérica de borrar una matriz a
memset
simplemente restablecer una cadena, es excesivo y basta con poner a cero el primer elemento (como se indica en otras respuestas).EDITAR Para usar memset , debe incluir string.h .
fuente
Depende de lo que quieras decir con 'vacío':
members[0] = '\0';
fuente
No se moleste en intentar poner a cero su matriz de caracteres si se trata de cadenas. A continuación se muestra una forma sencilla de trabajar con las cadenas de caracteres.
Copiar (asignar nueva cadena):
strcpy(members, "hello");
Concatenar (agregar la cadena):
strcat(members, " world");
Cuerda vacía:
members[0] = 0;
Tan simple como eso.
fuente
miembros char [255] = {0};
fuente
EDITAR: Dada la edición más reciente de la pregunta, esto ya no funcionará ya que no hay una terminación nula; si intentara imprimir la matriz, obtendría sus caracteres seguidos de varios caracteres no legibles por humanos. Sin embargo, dejo esta respuesta aquí como wiki de la comunidad para la posteridad.
char members[255] = { 0 };
Eso debería funcionar. Según el lenguaje de programación C:
Esto significa que cada elemento de la matriz tendrá un valor de 0. No estoy seguro si eso es lo que consideraría "vacío" o no, ya que 0 es un valor válido para a
char
.fuente
No puede vaciar una matriz como tal, siempre contiene la misma cantidad de datos.
En un contexto más amplio, los datos de la matriz pueden representar una lista vacía de elementos, pero eso debe definirse además de la matriz. La forma más común de hacer esto es mantener un recuento de elementos válidos (ver la respuesta por pmg) o cadenas para terminarlos con un carácter cero (la respuesta de Felix). También hay formas más complicadas, por ejemplo, un búfer de anillo usa dos índices para las posiciones donde se agregan y eliminan datos.
fuente
members[0] = 0;
es suficiente, dados sus requisitos.
Sin embargo, observe que esto no está "vaciando" el búfer. La memoria todavía está asignada, es posible que todavía existan valores de caracteres válidos en ella, etc.
fuente
0
es un personaje válido. No sabemos simembers
se tratan como cadena C o no.Utilizar
bzero(array name, no.of bytes to be cleared);
fuente
Yo iria con
members_in_use = 0;
fuente
Por "vaciar una matriz" si te refieres a restablecer a 0, entonces puedes usar bzero.
#include <strings.h> void bzero(void *s, size_t n);
Si desea llenar la matriz con algún otro carácter predeterminado, puede usar la función memset.
#include <string.h> void *memset(void *s, int c, size_t n);
fuente
más simple es mejor, ¿tiene sentido?
en este caso solo los miembros [0] = 0 funcionan. no hagas una pregunta simple tan complicada.
fuente
Descargo de responsabilidad: no suelo programar en C, por lo que puede haber algún problema de sintaxis en mis ejemplos, pero espero que las ideas que trato de expresar sean claras.
Si "vaciar" significa "que contiene una cadena vacía", puede simplemente asignar el primer elemento de la matriz a cero, lo que efectivamente hará que la matriz contenga una cadena vacía:
members[0] = 0;
Si "vaciar" significa "liberar la memoria que está usando", no debe usar una matriz de caracteres fija en primer lugar. Más bien, debe definir un puntero a char y luego hacer malloc / free (o asignación de cadena) según corresponda.
Un ejemplo que usa solo cadenas estáticas:
char* emptyString=""; char* members; //Set string value members = "old value"; //Empty string value member = emptyString //Will return just "new" strcat(members,"new");
fuente
Puede utilizar las siguientes instrucciones:
strcpy_s(members, "");
fuente