- 1
- 2
- 3
- 4
- 5
- 6
char* getID(){
uint32_t id = calcuate_id(); // Непринципиально, сложные какие то вычисления
static char str[16] = {0};
sprintf(str, "%ud", id);
return str;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+135
char* getID(){
uint32_t id = calcuate_id(); // Непринципиально, сложные какие то вычисления
static char str[16] = {0};
sprintf(str, "%ud", id);
return str;
}
На самом деле кусок модуля к nginx. Вычисляетися целое число, преобразуется в десятичное представление....
tirinox 29.08.2013 14:47 # 0
klavdiev 29.08.2013 15:11 # +3
tirinox 29.08.2013 16:37 # +1
bormand 29.08.2013 16:01 # +2
А вообще этот код не потокобезопасен. Да и в одном потоке могут возникнуть проблемы, если не задокументирован тот факт, что результат живет только до следующего вызова.
bormand 29.08.2013 16:12 # 0
Хотя тогда результат могут и освободить с помощью free...
blackhearted 30.08.2013 15:42 # 0
И указатель или нет - разница невелика.
bormand 30.08.2013 15:46 # 0
Их отделяет всего один символ: & или *.
Psionic 30.08.2013 12:52 # −1
WGH 31.08.2013 23:08 # 0
roman-kashitsyn 29.08.2013 16:02 # +1
bormand 29.08.2013 16:03 # 0
И аналогичной херни в той же libc полно...
bormand 29.08.2013 16:13 # 0
roman-kashitsyn 29.08.2013 17:06 # +2
myaut 29.08.2013 16:17 # +1
klavdiev 29.08.2013 16:34 # −1
Остальное по поводу free и нежелательной многопоточности вполне документировано, я же написал, это кусок модуля для nginx
bormand 29.08.2013 16:39 # 0
Проверяли? :) Вот лишнее d оно пишет, да. Но откуда там возьмется 2345?! printf же сам всегда терминирует строку нулем. Или в api nginx'овых модулей не нультерминейтед строки, и для него важен этот хлам после нолика?
klavdiev 29.08.2013 17:00 # 0
bormand 29.08.2013 17:16 # 0