2012-06-25 2 views
1

원래 코드 :문자열을 포맷팅 함수로 전달 하시겠습니까? stderr로 출력

extern "C" { 
/* error: output error message */ 
void Error(const int error, char *message, ...) 
{ 
    va_list arg; 
    fflush(stdout); 
    fflush(stderr); 

    if (error > 0) 
    fprintf(stderr, "\nError: "); 
    else 
    fprintf(stderr, "\nWarning: "); 

    va_start(arg, message); 
    vfprintf(stderr, message, arg); 
    va_end(arg); 

    fflush(stderr); 
    if (error > 0) 
     exit(error); 
} 

void main(){ 
Error(0,"Problem %s in file", "sometext"); 
} 

}//extern "C" 

는 그 같이 사용하려면 코드를 수정했습니다. 'Problem |�;A.|�;A. in file'

__android_log_print(ANDROID_LOG_WARN, "HTS_API","Problem %s in file", "sometext");

올바른 출력입니다 : 내가 잘못 뭐하는 거지 'Problem sometext in file'

extern "C" { 
#include <android/log.h> 
#include <jni.h> 
#include <sys/types.h> 

#include <stdio.h> 
#include <stdlib.h> 
#include <stdarg.h> 
#include <math.h> 

/* error: output error message */ 
void Error(const int error, char *message, ...) 
{ 
    va_list arg; 

    va_start(arg, message); 
    if (error > 0) 
    __android_log_print(ANDROID_LOG_ERROR, "HTS_API", message, arg); 
     else 
    __android_log_print(ANDROID_LOG_WARN, "HTS_API", message, arg); 
    va_end(arg); 

    if (error > 0) 
     exit(error); 
} 
void main(){ 
Error(0,"Problem %s in file", "sometext"); 
} 

}//extern "C" 

문제는 내 코드 출력이 있다는 것입니다 로그 캣을 인쇄해야?

+0

말을 vsprintf을 사용하여 그러나 그것을'error'라고 부르십시오. 또한 'int main'이되어야합니다. –

+0

오타 였고 주 기능이 무작위였습니다 – Paxmees

+1

컴파일러 경고가 있었습니까? – Moss

답변

9

__android_log_print은 매개 변수로 va_list을 허용하지 않습니다. 변수 매개 변수 목록을 허용합니다.

그것은 최신 NDK 그들이 당신이 원하는 어떤

int __android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap); 

을 추가 한 것 같습니다. 이전에 당신은이 문제를 해결해야 할 것 중 하나를 다시 구현 가변 인자리스트와 매크로로 Error을, 또는 버퍼에 오류 메시지를 포맷 한 다음 Error``로 정의

__android_log_print(ANDROID_LOG_WARN, "HTS_API", "%s", buf); 
관련 문제