C-String Manipulation im alten Stil scheint für viele Leute ein Bugaboo zu sein.
Ich habe zwei hier in meinem Emacs-Puffer.Beispiel 1:
strcpy(label, "\0");
strcpy(comm1, "\0"); //!!!20060818 Added protective code for missing nulls
strcpy(comm2, "\0");
strcpy(dir, "\0");
Dies ist im Grunde eine Routine mit allen dazugehörigen Kopf ruft genau das zu tun:
label[0] = '\0';
Hier ist eine noch Phantasie Variante später im Code:
strncpy(inq.szComment, "\0", 1);
Auch dies ist nur eine sehr aufwendige und langsame Art, dem ersten Element von inq.szComment das Nullzeichen '\ 0' zuzuweisen.
Beispiel 2:
// This is always good for string operations, but may not be necessary.
strcat(RpRecPrefix, "\0");
strcat(RpCircPrefix, "\0");
strcat(RpEventPrefix, "\0");
strcat(RpFdk, "\0");
strcat(RpAic, "\0");
strcat(RpDcl, "\0");
strcat(RpVis, "\0");
strcat(RpSnd, "\0");
strcat(RpL3Fsi, "\0");
strcat(RpStartState, "\0");
strcat(RpContRun, "\0");
Diese finden die Nullen am Ende der ersten String-Parameter, und tun dann nichts. Ich kann nicht sagen, ob der Autor dachte, er würde sich davor schützen, keine abschließende Nul zu haben, oder wenn er dachte, dass das am Ende eine extra Null würde. Wie auch immer, er hat sich geirrt.
OK. Hier ist mein persönlicher Favorit.
if (*pnFrequency == 1) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 1 Hz",
*pliWriteRate);
}
else if (*pnFrequency == 2) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 2 Hz",
*pliWriteRate);
}
else if (*pnFrequency == 4) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 4 Hz",
*pliWriteRate);
}
else if (*pnFrequency == 10) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 10 Hz",
*pliWriteRate);
}
else if (*pnFrequency == 20) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 20 Hz",
*pliWriteRate);
}
else if (*pnFrequency == 40) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 40 Hz",
*pliWriteRate);
}
else if (*pnFrequency == 60) {
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at 60 Hz",
*pliWriteRate);
}
else { // above frequencies used for analysis
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec", *pliWriteRate);
}
beachte, dass der Wert von * pnFrequency wir in jedem Zweig überprüfen, ist identisch mit dem Wert hart codiert in seine sprintf, und das ist der einzige Unterschied in jedem und jeden Zweig. Das Ganze hätte sein müssen:
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at %d Hz", *pliWriteRate,
*pnFrequency);
ich einfach nur nicht vorstellen, wie diese Datei 12.000 Zeilen lang ...
Machen Sie dies zu einem Wiki und Sie haben mein upvote. Wenn nicht, hast du meine Schlussabstimmung. – Seb
Ich programmiere seit mehr als einem Jahrzehnt in verschiedenen Sprachen und hasse immer wenn (flag). Persönliche Präferenz, aber ich finde if (flag == true) oder if (flag! = True) unendlich lesbarer und weniger anfällig für Tippfehler. Außerdem ist es repräsentativer für das, was die Linie eigentlich bedeutet. Schätze, das ist nur eine dieser Macken, die du aufnimmst, da ich andere Programmierer kenne, die möglichst wenige Charaktere sehen wollen. – Serapth
@seb kein Problem – sal