Старомодные манипуляции с строкой типа C, похоже, являются bugaboo для многих людей.
У меня есть два здесь, в моем буфере emacs.Пример 1:
strcpy(label, "\0");
strcpy(comm1, "\0"); //!!!20060818 Added protective code for missing nulls
strcpy(comm2, "\0");
strcpy(dir, "\0");
В основном это вызов подпрограммы со всеми сопутствующими накладными расходами просто сделать:
label[0] = '\0';
Вот еще более причудливый вариант позже в коде:
strncpy(inq.szComment, "\0", 1);
Опять же, это очень сложный и медленный способ присвоить нуль-символу '\ 0' первому элементу inq.szComment.
Пример 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");
Они считают нуль в конце первого параметра строки, а затем сделать ничего. Я не могу сказать, думал ли автор, что он защищает от того, что у него нет завершающего нула, или если он думал, что это каким-то образом уловит дополнительный нуль в конце. В любом случае, он был неправ.
OK. Вот мой личный фаворит.
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);
}
Обратите внимание, что значение * pnFrequency мы проверяем, в каждой отрасли идентично значению жестко закодированной в ее Sprintf, и это единственное различие в любой и каждой отрасли. Все это должно было быть:
sprintf(szLogMsg, "Write to disk speed = %d bytes/sec at %d Hz", *pliWriteRate,
*pnFrequency);
Я просто не могу себе представить, как этот файл должен быть длиной 12000 строк ...
Сделайте это wiki, и у вас есть мой upvote. Если нет, у вас будет мое закрытое голосование. – Seb
Я программировал уже более десяти лет на разных языках и всегда ненавидел if (flag). Личные предпочтения, но я нахожу if (флаг == true) или if (flag! = True) бесконечно более читабельным и менее подверженным ошибкам ввода. Кроме того, он более репрезентативен тем, что на самом деле означает линия. Угадайте, что это всего лишь один из тех причуд, которые вы подбираете, поскольку я знаю других программистов, которые хотят видеть как можно меньше символов. – Serapth
@seb no problem – sal