Pensé que al establecer el primer elemento en un valor nulo se borraría todo el contenido de una matriz de caracteres.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
Sin embargo, esto solo establece el primer elemento en nulo.
o
my_custom_data[0] = 0;
en lugar de usar memset
, pensé que los 2 ejemplos anteriores deberían borrar todos los datos.
Respuestas:
Depende de cómo desee ver la matriz. Si está viendo la matriz como una serie de caracteres, entonces la única forma de borrar los datos es tocar cada entrada.
memset
es probablemente la forma más eficaz de lograrlo.Por otro lado, si elige ver esto como una cadena C / C ++ terminada en nulo, establecer el primer byte en 0 borrará efectivamente la cadena.
fuente
Una matriz en C es solo una ubicación de memoria, por lo que, de hecho, su
my_custom_data[0] = '\0';
asignación simplemente establece el primer elemento en cero y deja los otros elementos intactos.Si desea borrar todos los elementos de la matriz, deberá visitar cada elemento. Para eso
memset
sirve:Por lo general, esta es la forma más rápida de solucionar este problema. Si puede usar C ++, considere std :: fill en su lugar:
fuente
¿Por qué pensaría que establecer un solo elemento borraría toda la matriz? En C, especialmente, pocas cosas pasan sin que el programador lo programe explícitamente. Si establece el primer elemento en cero (o cualquier valor), entonces ha hecho exactamente eso, y nada más.
Al inicializar, puede establecer una matriz en cero:
De lo contrario, no conozco ninguna otra técnica que no sea memset, o algo similar.
fuente
Utilizar:
O:
fuente
memset(my_custom_data, 0, strlen(my_custom_data));
) solo se borrará hasta el primer '\ 0', que podría estar más allá del final de la matriz. Esto puede estar bien o no.Prueba el siguiente código:
fuente
¿Por qué no usar
memset()
? Así es como se hace.La configuración del primer elemento deja intacto el resto de la memoria, pero las funciones str tratarán los datos como vacíos.
fuente
Por favor, encuentre a continuación donde he explicado con datos en la matriz después del caso 1 y el caso 2.
Caso 1:
Resultado:
Caso 2:
Resultado:
Aunque configurar el primer argumento en NULL hará el truco, es aconsejable usar memset
fuente
No Todo lo que está haciendo es establecer el primer valor en '\ 0' o 0.
Si está trabajando con cadenas terminadas en nulo, en el primer ejemplo, obtendrá un comportamiento que imita lo que espera, sin embargo, la memoria todavía está configurada.
Si desea borrar la memoria sin usar memset, use un bucle for.
fuente
Deberías usar memset. Establecer solo el primer elemento no funcionará, debe establecer todos los elementos; si no es así, ¿cómo podría establecer solo el primer elemento en 0?
fuente
Escribir un carácter nulo en el primer carácter hace precisamente eso. Si lo trata como una cadena, el código que obedece al carácter de terminación nula lo tratará como una cadena nula, pero eso no es lo mismo que borrar los datos. Si realmente desea borrar los datos, deberá usar memset.
fuente
Normalmente me gusta esto:
fuente
Eso no es correcto como descubriste
¡Exactamente!
Necesita usar memset para borrar todos los datos, no es suficiente establecer una de las entradas como nula.
Sin embargo, si establecer un elemento de la matriz en nulo significa algo especial (por ejemplo, cuando se usa una cadena de terminación nula en), podría ser suficiente establecer el primer elemento en nulo. De esa manera, cualquier usuario de la matriz entenderá que está vacía aunque la matriz todavía incluya los caracteres antiguos en la memoria.
fuente
establezca el primer elemento en NULL. imprimir la matriz de caracteres no le devolverá nada.
fuente
¿Qué tal lo siguiente?
fuente
fuente
Intente lo siguiente:
fuente