우선 정말 감사드리구요~~~
죄송하지만 한가지 더 여쭤 보겠습니다...
문제는==>>>
(...,vp_start)등을 사용하지 않고...
갯수를 알수없는 인자들를 받아서 printf를 구현하는 것입니다...
어셈..과 c를 사용해서요~~~
그리고 조건은... %d 만을 사용한다예여~~ -.-;;
너무 무리한걸 여쭤본건 아닌지 걱정이네요~~
지금 주신 정보만으로도... 저에겐 많은 도움이 됐습니다..
감사합니다....
Starlet 님이 쓰신 글 :
: 안녕하세요. printf(const char *format, ...) 만을 구현하면 다음과 같습니다.
:
: int printf(const char* format, ...)
: {
: char *buf;
: va_list args;
: int i;
:
: buf = (char*) malloc(256);
: va_start(args, format);
: i=vsprintf(buf,format,args);
: va_end(args);
: putstr(buf);
: free(buf);
:
: return i;
: }
:
: 여기서 중요한 건 va_start, args, va_end 그리고 vsprintf입니다.
: va_start의 파라미터로 args와 format을 줍니다. 그러면 args가 format 다음부터의 ... 에 해당하는 파라미터들을 가리키게 됩니다. va_end 는 args를 해제하는 함수입니다.
: vsprintf에 마지막 파라미터로 args가 넘어갑니다. 이제 vsprintf를 구현해야 합니다.
:
: vsprintf의 형식은 다음과 같습니다.
: int vsprintf(char *buffer, const char *format, va_list args);
:
: 이제 이 vsprintf 함수 내에서 format 문자열을 한글자씩 읽어 %d, %s 등이 나오면 va_arg()를 이용해 하나씩 ... 에 해당하는 파라미터들을 꺼내 대체해 주시면 됩니다. 참고로 va_arg(args, int)처럼 int를 입력해주면 ...에 들어오는 파라미터를 integer형으로 돌려주며 char를 넣으면 char형으로 인식해 돌려줍니다.
:
: 다음으로 테스트 해보세요.
:
: void testfunc(char *format, ...)
: {
: va_list args;
:
: va_start(args, format);
: printf("%d\n", va_arg(args, int));
: printf("%d\n", va_arg(args, int));
: va_end(args);
: }
:
: testfunc("test", 1, 2); 이렇게 이 함수를 호출하면 1, 2가 차례대로 출력될것입니다.
:
: 워니 님이 쓰신 글 :
: :
: : 학교에서 my_printf() 함수를 만들어야 하거든요~~
: : 그래서 참고 할려구요~~
: : 좋은 하루 되세요~~
|