Go Down

Topic: Bug do sprintf? (Read 737 times) previous topic - next topic

evandro_net

Olá a todos,

Ao executar as seguintes instruções:

Quote

  char buf[100];
  long d1=1, d2=2, d3=3, d4=4;
  sprintf(buf,"Uptime %d days %2.2d:%2.2d:%2.2d",d1,d2,d3,d4);
  Serial.println(buf);


Ela sempre retorna a seguinte mensagem:

Quote
Uptime 1 days 00:02:00


E eu esperava por Uptime 1 days 02:03:04 !!!

Sei que com int funciona normalmente, porém com long mostra diferente.

Será que isso é um bug do sprintf?

[]'s
Evandro
Thanks,
Evandro

bubulindo

Experimenta fazer um cast para int na função.
Code: [Select]
sprintf(buf,"Uptime %d days %2.2d:%2.2d:%2.2d",(int)d1,(int)d2,(int)d3,(int)d4);

ou então tirar a precisão:
sprintf(buf,"Uptime %d days %2d:%2d:%2d",d1,d2,d3,d4);


Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Senso

Quando usa longs use L ou LU para long unsigned em vez do d que é para doubles(numeros em virgula flutuante).

bubulindo

Ou até usar int, uma vez que o dia não tem mais de 65356 horas. :)
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

evandro_net

Thanks,
Evandro

Go Up