2012-06-24 3 views
7

포맷으로 돌아 가기 나는 같은 것을 할 싶습니다 : C 함수가 문자열

writeLog(printf("This is the error: %s", error)); 

그래서 내가 형식화 한 문자열을 반환하는 함수를 찾고 있어요.

+8

하는'snprintf'를 검색합니다. –

+1

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ for sprintf – Mark

+0

죄송 합니다만 snprintf는 형식이 지정된 문자열을 변수에 넣는 것처럼 sprintf와 거의 같습니다. 내가 찾고있는 것은 형식화 된 문자열을 직접 반환하는 함수입니다. – Zulakis

답변

5

그런 함수가 존재하지 않는다면 약간 다른 접근법을 고려하십시오. 즉, 문자열과 가변 개수의 인수를 취합니다. 그런 다음 내부적으로 메시지 서식을 지정하십시오. 이렇게하면 메모리 관리 문제가 해결되고 기존의 writeLog은 손상되지 않습니다. 이 가능 찾을 경우

, 당신은이 라인을 따라 뭔가를 사용할 수 있습니다

void writeLog(const char* format, ...) 
{ 
    char  msg[100]; 
    va_list args; 

    va_start(args, format); 
    vsnprintf(msg, sizeof(msg), format, args); // do check return value 
    va_end(args); 

    // write msg to the log 
} 
+1

좋은 접근 방식을 가져 주셔서 감사합니다. 정확히 내가 무엇을 찾고 있었는지. – Zulakis

5

표준 라이브러리에는 이러한 기능이 없으므로 표준 라이브러리에는 이러한 기능이 없습니다. 원한다면 직접 쓰실 수 있습니다. 생각해 볼 필요가있는 것은 다음과 같습니다. 누가 반환 된 문자열에 대한 저장소를 할당 할 것이며 누가 그것을 해제 할 것입니까? 스레드로부터 안전 할 것인가 아닌가? 반환되는 문자열의 최대 길이에 제한이 있습니까?

관련 문제