your programing

sprintf가 있는 패딩

lovepro 2023. 6. 11. 21:11
반응형

sprintf가 있는 패딩

바보 같은 질문이 있습니다.0으로 정수를 버퍼 패딩에 인쇄하고 싶지만 정리할 수 없습니다.sprintf포맷. 나는 다음을 시도하고 있습니다.

char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );

다음과 같은 끈을 갖기를 바랍니다.

"000000000000000000000000000324"

내가 뭘 잘못하고 있는 거지?최대 너비가 30자인 경우 0인 패드를 의미하지 않습니까?

"%030d"당신이 찾고 있는 드로이드는?

구문을 약간 잘못 이해했습니다.다음 코드는 원하는 출력을 생성합니다.

char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );

Printf에 대한 위키백과의 기사에서:

[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".

패딩 및 폭은 형식 지정자 앞에 옵니다.

sprintf( buf, "%030d", my_val );

시도:

sprintf( buf, "%030d", my_val );

정밀도 및 폭 모수는 다음이 아니라 '%'와 변환 지정자 'd' 사이에 있어야 합니다.사실 모든 국기가 그렇습니다.따라서 양수 앞에 '+'를 붙이려면 '%+d'를 사용합니다.

그건…%030d타이프라이터를 끝에 붙입니다.

느린 라이브러리 호출이 필요 없는 상당히 효과적인 버전:

#include <stdio.h>

void uint_tostr (unsigned int n, size_t buf_size, char dst[buf_size])
{
  const size_t str_size = buf_size-1;

  for(size_t i=0; i<str_size; i++)
  {
    size_t index = str_size - i - 1;
    dst[index] = n%10 + '0';
    n/=10;
  }
  dst[str_size] = '\0';
}


int main (void)
{
  unsigned int n = 1234;
  char str[6+1];
  uint_tostr(n, 6+1, str);
  puts(str);
}

이는 보다 수백 배 더 빠르지만 추가로 최적화할 수 있습니다.sprintf그대로

언급URL : https://stackoverflow.com/questions/6116994/padding-with-sprintf

반응형