Sto eseguendo il porting di codice su Windows e il compilatore Microsoft (Visual C++ 8) mi sta dicendo che strerror()
non è sicuro.Perché non posso usare strerror?
Mettendo da parte il fattore di disturbo in tutte le risorse di stringa sicure da Microsoft, posso effettivamente vedere che alcune delle funzioni deprecate sono pericolose. Ma non riesco a capire cosa potrebbe essere sbagliato con strerror()
. Prende un codice (int
) e restituisce la stringa corrispondente o la stringa vuota se tale codice non è noto.
Dov'è il pericolo?
Esiste una buona alternativa in C?
Esiste una buona alternativa in C++?
[modifica]
Avendo ottenuto alcune buone risposte, e ora comprendere che alcune implementazioni possono essere così pazzo da scrivere in realtà ad un buffer comune condiviso - pericoloso per rientranza all'interno di un singolo thread, figuriamoci tra i thread! - la mia domanda smette di essere "Perché non posso usarla e quali sono le alternative?" a "Esistono alternative decenti e succinte in C e/o C++?"
Grazie in anticipo
Non è possibile utilizzarlo perché Microsoft dice "lo standard ISO C è dannato - non lo lasceremo usare, a meno che non si ignori l'avviso o l'errore con un pragma". Hanno anche bandito memcpy() - che è ridicolo perché gli dici quanti byte copiare e se non riesci a pensarci e sappi che c'è spazio sufficiente nello spazio di destinazione per il numero di byte prima di chiamare memcpy() , non appartieni a un team che scrive codice in C o C++. –