Condividi tramite


Avviso del compilatore (livello 1) C4477

'function': la stringa di formato 'string' richiede un argomento di tipo 'type', ma il numero di argomento variadic ha tipo 'type'

Il compilatore ha rilevato una mancata corrispondenza tra il tipo di argomento necessario per soddisfare il segnaposto in una stringa di formato e il tipo di argomento fornito. Per l'uso corretto delle famiglie printf e scanf di funzioni variadic è necessario specificare argomenti dei tipi specificati dalla stringa di formato. Una mancata corrispondenza indica in genere che nel codice è presente un bug.

Per informazioni sugli argomenti associati ai segnaposto della stringa di formato della famiglia printf, vedere Sintassi della specifica del formato: funzioni printf e wprintf. Per informazioni specifiche sulla funzione funzione, vedere la documentazione.

Questo avviso è una novità di Visual Studio 2015.

Esempio

Questo esempio mostra due avvisi C4477 per la prima funzione printf_s, quando vengono rilevati due argomenti come tipo errato e illustra anche come risolvere i problemi.

// C4477p.cpp
// compile with: cl /c /W4 C4477p.cpp
#include <stdio.h>

void print_func(int a, float f)
{
    printf_s("This takes int and double arguments %d and %f.\n", f, a); // C4477, expected int then double
    printf_s("This takes int and double arguments %d and %f.\n", a, f); // fix: types in correct order
}

Nel primo messaggio di errore, il compilatore rileva che viene fornito un double argomento quando è previsto un oggetto int . Un float oggetto viene alzato di livello automaticamente in double nell'elenco di argomenti variadic. Il secondo messaggio di errore indica che il compilatore ha previsto un double argomento, ma è stato fornito un oggetto int . Il compilatore non può indicare che è stato scambiato l'ordine degli argomenti. È necessario esaminare la stringa di formato per determinare l'ordine effettivo dell'argomento e specificare i tipi di argomento corretti.