Al menos con GCC y glibc, los símbolos para las funciones C estándar son débil y así puede anularlos. Por ejemplo,
strcpy.c:
#include <string.h>
#include <stdio.h>
char * strcpy(char *dst, const char *src)
{
char *d = dst;
while (*src) {
*d = *src;
d++;
src++;
}
printf("Called my strcpy()\n");
return (dst);
}
int main(void)
{
char foo[10];
strcpy(foo, "hello");
puts(foo);
return 0;
}
y construirlo como esto:
gcc -fno-builtin -o strcpy strcpy.c
y luego:
$ ./strcpy
Called my strcpy()
hello
señalan la importancia de -fno-builtin
aquí. Si no usa esto, GCC reemplazará la llamada strcpy()
a una función incorporada, de la cual GCC tiene un número.
No estoy seguro de si esto funciona con otros compiladores/plataformas.
¿Por qué quieres hacer esto? ¿Qué podría * posiblemente * ser el punto? –
¿Realmente vale la pena el problema? Debería editar el archivo de cabecera string.h, cuya ubicación depende del sistema y el entorno que esté utilizando. Pero creo que sería mejor que escribieras una función separada. – Shredderroy
@CodyGray, supongo, mirando FatalError [respuesta] (http://stackoverflow.com/questions/9107259/how-to-replace-c-standard-library-functioin#9107319), que podría reemplazar cada llamada en un ejecutable propio que imprime la depuración? O algo así, supongo. Probablemente no sea una buena práctica. Debería escribir una nueva función con un nombre diferente y cambiar todas las llamadas. – Anthony