Pergunta

Eu estou enfrentando um problema estranho. Eu estou usando sprintf ou swprintf de acordo com as define construir com ou sem unicode. Tenho envolto estas funções em minha própria função como esta:

int mysprintf( MCHAR* str,size_t size, const MCHAR* format, ... )
{
#ifdef MYUNICODE
    return swprintf( str, size, format);
#else
    return snprintf( str, format);
#endif
}

Estas funções estão em uma classe String, que é um projeto separado e é compilado como uma lib. Eu usá-lo em outro programa. Agora, se eu usar o mysprintf ()

msprintf(str,10, _M("%d,%d"),height,width);

Eu recebo alguns valores de lixo no buffer de string. Mas se eu chamar diretamente a função swprintf do programa funciona multas. Defini UNICODE na construção ea swprintf função não são chamados, mas enche alguns valores de lixo. Eu não entendo o que está acontecendo de errado.

Graças Amit

Foi útil?

Solução

O problema de fato reside em que você tem sua própria função com número variável de parâmetros. Você precisa obter um ponteiro para a lista de argumentos e passar isso aos callees. va_start permite que você faça exatamente isso e ele precisa o último ponteiro na lista de argumentos para a sua função.

   int mysprintf( MCHAR* str, size_t size, const MCHAR* format, ... )
    {
      va_list args;
      va_start(args, format);

      int result;

    #ifdef MYUNICODE
        result = vswprintf( str, size, format, args);
    #else
        result = ..
    #endif

      va_end(args);

      return result;
   }

Felicidades!

Outras dicas

Você precisa passar os os ... parâmetros da função mysprintf às funções prrintf que ele contém. Para fazer isso, você deve estar usando a família vprintf () de funções - veja http://msdn.microsoft.com/en-us/library/0zf95wk0%28VS.71%29.aspx para mais detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top