memset()
se declara para devolver void*
que siempre es el mismo valor que la dirección pasada a la función.
¿Cuál es el uso del valor de retorno? ¿Por qué no vuelve void
?
memset()
se declara para devolver void*
que siempre es el mismo valor que la dirección pasada a la función.
¿Cuál es el uso del valor de retorno? ¿Por qué no vuelve void
?
strcat()
? A veces, las funciones estándar son lo que se especifica que son, no lo que deberían ser.
Respuestas:
La firma está en línea con todas las otras funciones similares: memcpy()
, strcpy()
etc. Siempre pensé que esto se hizo para permitir a uno a las llamadas a la cadena de tales funciones, y que de otro modo utilizar este tipo de llamadas en las expresiones.
Dicho esto, nunca me he encontrado con una situación del mundo real en la que me sienta obligado a utilizar el valor de retorno de esa manera.
Puede usarse para el encadenamiento de llamadas como:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
devolver el puntero más allá del último copiado. memset(my_strcpy(a, "bla"), 0, a + 200);
(como std::copy_n
y std::fill_n
hacer en C ++).
Me encontré con esta pregunta cuando busqué en Google para ver qué devolvía Memset.
Tengo un código en el que pruebo un valor, luego, si eso es cierto, pruebe para ver si un valor es ceros.
Debido a que no hay una forma completamente portátil en C para probar ceros, tengo que ejecutar Memset en el medio.
Entonces mi código es:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Esto habla del propósito de encadenamiento enumerado en las preguntas anteriores, pero es un ejemplo del uso de esta técnica.
Dejaré que otros juzguen si esta es una buena codificación o no.