Cómo imprimir una dirección de memoria en C

Mi código es:

#include  #include  void main() { char string[10]; int A = -73; unsigned int B = 31337; strcpy(string, "sample"); // printing with different formats printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A,A,A); printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B,B,B); printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n", B,B,B); // Example of unary address operator (dereferencing) and a %x // format string printf("variable A is at address: %08x\n", &A); 

Estoy utilizando la terminal en linux mint para comstackr, y cuando bash comstackr usando gcc recibo el siguiente mensaje de error:

 basicStringFormatting.c: In function 'main': basicStringFormatting.c:18:2: warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'int *' [-Wformat=] printf("variable A is at address: %08x\n", &A); 

Todo lo que bash hacer es imprimir la dirección en memoria de la variable A.

Use el especificador de formato %p :

 printf("variable A is at address: %p\n", (void*)&A); 

El estándar requiere que el argumento sea de tipo void* para el especificador %p . Dado que printf es una función variadica, no hay conversión implícita a void * desde T * lo que sucedería implícitamente para cualquier función no variada en C. Por lo tanto, se requiere el molde. Para citar el estándar:

7.21.6 Funciones formateadas de entrada / salida (borrador C11)

p El argumento debe ser un puntero a void. El valor del puntero se convierte en una secuencia de caracteres de impresión, de una manera definida por la implementación.

Mientras que usted está usando %x , que espera unsigned int mientras que &A es de tipo int * . Puede leer sobre los especificadores de formato para printf del manual . La falta de coincidencia del especificador de formato en printf conduce a un comportamiento indefinido .