2011-10-31 15 views

Respuesta

21

Es %td. Ver here.

+1

Esa referencia no aparece completa; el carácter 't' es un modificador de longitud del especificador de tipo' d'. También le sugiero que especifique Visual Studio en su pregunta si esa es la plataforma en la que está interesado. – trojanfoe

+5

'% td' es estándar. El compilador C de Visual Studio no cumple con el estándar C actual. –

+3

@AmirSaniyan: el 't' es un especificador de tamaño, no un tipo (el tipo es' d' aquí). [Aparentemente] (http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx) 'I' debe usarse como el especificador de tamaño para' ptrdiff_t' con la implementación de Microsoft (por lo tanto '% Id'), que no es estándar – caf

5

Use %td y si su compilador no lo admite, intente con %ld (también envíe la entrada a long).

11

C11 proyecto explica el modificador de longitud para ptrdiff_t en 7.21.6.1 7 "La función fprintf"

t
Especifica que un siguiente d, i, o, u, se aplica x, o X especificador de conversión a un ptrdiff_t o el correspondiente argumento de tipo entero sin signo; o que el siguiente especificador de conversión n se aplica a un puntero a un argumento ptrdiff_t.

Uso "%td" como en el siguiente: Crédito: @trojanfoe

ptrdiff_t diff = b - a; 
printf("diff = %td", diff); 

Si el compilador no admite "%td", convertirse a un tipo con signo - cuanto más tiempo, mejor. Luego asegure el formato alternativo y la coincidencia de argumentos.

// Note the cast 
printf("diff = %lld", (long long) diff); // or 
printf("diff = %ld", (long) diff); 

Ref format specifiers

Cuestiones relacionadas