Domanda

int fCount = 0;
char frameNum[7];
sprintf(frameNum, %06u", fCount);


int fCount = 0;
char frameNum[6];
sprintf(frameNum, %06u", fCount);

Q1. Quale è corretto, 6 o 7?

Q2. Sto usando VC6 e il file è sample.cpp.
Penso che Sprintf sia C. c'è un modo migliore? Ho bisogno della stringa char destra giustificata e con zeri imbottiti.

Per favore, non dirmi di usare un compilatore più recente. Ho bisogno di usare VC6 per ora.

È stato utile?

Soluzione

Il primo è corretto. A proposito, non c'è perdita di memoria.

--

Penso che Sprintf sia C. c'è un modo migliore?

Sì. Way C ++:

std::stringstream ss;  //#include <sstream>
ss << fCount;
std::string frameNum = ss.str();

Altri suggerimenti

7, poiché Sprintf aggiungerà un byte nullo ' 0' alla fine della stringa.

Nessuno dei due sarà una perdita di memoria: i dati sono sullo stack!

Q1. Quale è corretto, 6 o 7?

Né. Il 6 nella stringa di formato è un minimo larghezza, quindi 7 caratteri non saranno sufficienti se fCount >= 1000000. La dimensione più piccola che non traboccerà per qualsiasi input è std::numeric_limits<int>::digits10 + 2 (Per consentire tutte le cifre decimali, il carattere terminale e il segno se l'ingresso è negativo). Supponendo che VC6 fornisca <numeric_limits>; altrimenti sizeof(int)*3 + 2 è un limite superiore ragionevole. Se vuoi essere sicuro, chiama snprintf e controlla il valore di ritorno.

Q2. Sto usando VC6 e il file è sample.cpp. Penso che Sprintf sia C. c'è un modo migliore? Ho bisogno della stringa char destra giustificata e con zeri imbottiti.

Nella maggior parte dei casi stai meglio usando stringhe e flussi C ++, che gestiscono la propria memoria e non traboccano a meno che tu non faccia qualcosa di molto strano.

std::ostringstream s;
s << setw(6) << setfill('0') << fCount;
std::string frameNum = s.str();

Sono abbastanza sicuro che VC6 li supporti, ma è passato più di un decennio da quando ho avuto la sfortuna di combattere con quel compilatore, e ho fatto del mio meglio per dimenticare esattamente quanto fosse limitato. So che mi hai chiesto di non farlo, ma dirò: usa un compilatore più nuovo. La lingua è cambiata molto negli ultimi 15 anni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top