Pergunta

Eu quero sprintf () um valor long long sem sinal em visual C ++ 6.0 (C simples).

char buf[1000]; //bad coding 
unsigned __int64 l = 12345678; 
char t1[6] = "test1"; 
char t2[6] = "test2"; 
sprintf(buf, "%lli, %s, %s", l, t1, t2);

dá o resultado

12345678, (null), test1

(relógio que test2 não é impresso)

e l = 123456789012345 dá uma alça de exceção

alguma sugestão?

Foi útil?

Solução

Para imprimir um valor de unsigned __int64 no Visual C ++ 6.0, você deve usar %I64u, não %lli (consulte desta página no MSDN). %lli só é suportada no Visual Studio 2005 e versões posteriores. Assim, o código deve ser:

sprintf(buf, "%I64u, %s, %s", l, t1, t2);

Outras dicas

printf utiliza a reticências para passar uma lista de argumentos variável. O (null) que você vê é a segunda parte de seu longo comprimento, o que acontecerá a ser todos os 0 bits. Defina como 1 << 60 + 1 << 30 e você vai ter um acidente como o << 60 part 1 é interpretado como um char *.

A solução correcta seria para quebrar o número em três partes de 10 dígitos, "verylongvalue% 10000000000" "(verylongvalue / 10000000000)% 10000000000" "verylongvalue / 100000000000000000000".

Aparentemente, você não fez additionaltext atribuir ao char * necessário (string). Note que o long int foi processado, a vírgula foi copiado e somente o %s (null) gerado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top