2014-05-13 2 views
0

나는 Arduino 스케치를하고 있고 나는 약간의 공간을 얻으려고 노력하고있다. 일부 웹 사이트에서 sprintfprint보다 더 사용하는 것이 좋습니다. 시도했지만 더 많은 공간이 필요합니다. 예를 들어Sprintf는 인쇄보다 공간이 더 필요합니까?

는 :

tft.print(RTC.now().day(), DEC); 
    tft.print('/'); 
    tft.print(RTC.now().month(), DEC); 
    tft.print('/'); 
    tft.print(RTC.now().year(), DEC); 
    tft.print(' '); 
    tft.print(RTC.now().hour(), DEC); 
    tft.print(':'); 
    tft.print(RTC.now().minute(), DEC); 
    tft.print(':'); 
    tft.println(RTC.now().second(), DEC); 
    tft.println(); 

이유를 설명해 someboby 수 :

char toWrite[18]; 
    sprintf(toWrite,"%d/%d/%d %d:%d:%d",RTC.now().day(),RTC.now().month(),RTC.now().year()-2000,RTC.now().hour(),RTC.now().minute(),RTC.now().second()); 
    tft.println(toWrite); 

는보다 더 많은 공간을 차지?

감사합니다.

추신 : 내 영어 죄송합니다, 그것은 내 모국어 =)

+2

공간의 의미는 무엇입니까? 화면에? 기억? exe 크기? – doctorlove

+1

C++ 스트림 대신 ['std :: stringstream'] (http://en.cppreference.com/w/cpp/io/basic_stringstream)을 사용하십시오. 'sprintf'는 버퍼 오버런을 일으키기 쉽고'printf'는 유동적이지 않습니다. –

+1

루틴을위한 공간을 의미한다면, 인쇄물과 비교할 때 훨씬 복잡하고 영리한 일을하기 때문에 더 큰 편입니다. – Jiminion

답변

0

가 인쇄보다) 더 복잡한 (그리고 더 유연 루틴이기 때문에 루틴 sprintf와는 큰 아니다. 더 힘든 인쇄 문을 사용하여 코드를 작게 만들 수 있습니다. 불행히도이 경우에는 무료 점심 식사가 제공되지 않습니다.

0

불필요한 형식을 제거하면 실제로 printf를 줄일 수 있습니다.
여기 는

void myfprintf_(int fd,int nargs, ...){ 
    va_list ap; va_start(ap, nargs); static char *s; const char *fmt; 
    fmt=va_arg(ap, char *); 
    int i=0,p; 
    char buf[80]; 
while (fmt[i]){ 
    p=0; 
    while (fmt[i]!='%' && fmt[i]!=0) buf[p++]=fmt[i++]; 
    if (p != 0) write(fd,buf,p); 
    if (nargs-->0){ 
     switch (fmt[++i]) { 
     case 's': s=va_arg(ap, char *); break; 
     case 'd': s=dtos(va_arg(ap, int)); break; 
     case 'x': s=dtox(va_arg(ap, int),'a'); break; 
     case 'X': s=dtox(va_arg(ap, int),'A'); break; 
     case 'f': s=ftos(va_arg(ap, double)); break; 
     case 'c': buf[0]=(va_arg(ap, int));buf[1]=0;s=buf;break; 
     case '%': s="%"; break; 
     default : s="";break; 
     } write(fd,s,strlen(s)); 
    } 
i++; 
} 
va_end(ap); 
} 

은 주석 (더를 제거하는 경우가 작을 수) 내 변환 기능을 포함 1/2킬로바이트 아래로 컴파일 (printf와 그냥 fprintf와 첫 번째 인수로 1이다) 예를 들어 대체 fprintf와이다 기존 변환 함수에 대해 필요하지 않고 수정할 수있는 형식 - 더 호환되도록하려는 경우 int 함수와 무효화하여 반환 값에 대한 쓰기 반환 값을 합산하십시오. 나는 printf의 반환을 사용하지 않는다.

관련 문제