- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
char serverName[MAX_NAME];
char buttonName[MAX_NAME];
char serverIdStr[3];
serverIdStr[2] = '\0';
int currentSpot = 0;
// ...... получение serverName и currentSpot
serverIdStr[0] = '0' + ((currentSpot+1)/10);
serverIdStr[1] = '0' + ((currentSpot+1)%10);
strcpy(buttonName, buttonPrefix);
strcat(buttonName, serverIdStr);
guest 21.01.2010 04:30 # 0
guest 21.01.2010 07:33 # 0
guest 27.01.2010 15:51 # 0
И ещё можно так: char serverIdStr[] = "00";
тогда не нужно:
serverIdStr[2] = '\0';
и можно:
serverIdStr[0] += (currentSpot+1)/10;
serverIdStr[1] += (currentSpot+1)%10;
Говногость 09.05.2010 09:38 # 0
И намного медленее своих собратьев, выполняющихся за пару операций:
serverIdStr[0] += (currentSpot+1)/10;
serverIdStr[1] += (currentSpot+1)%10;
Хотя, видимо, скорость здесь не важна.
pushkoff 10.05.2010 16:19 # 0
sprintf заносит последовательно обе строки в буфер, что очень радует кеш, и sprintf в большинстве реализаций не считает размер строк...
в связке strcpy+strcat, вычисление размера строки которая уже есть в буфере (в момент strcat) очень не нравится кешу, хотя это верно только для очень больших строк и маленьких кешей...
sprintf вообще-то нагляднее...
cfdev 10.05.2010 18:36 # 0
это implementation-specific
pushkoff 10.05.2010 18:47 # 0
sptintf будет больше похож на
strcpy( &buf[0], string1 );
strcpy( &buf[length_of_string1], string2 ); где расчет length_of_string1 будет разультатом первого шага
+ разбор %s%s
а strcpy+strcat будет похожа на
strcpy( &buf[0], string1 );
strcpy( &buf[strlen(buf)], string2 );
можно заметить что разбор %s%s выполняется за константное время, в отличии от функции strlen(), поэтому можно с уверенностью сказать что существуют данные на которых sprintf будет быстрее...
статью найти не могу, так как встретил больше 2х лет назад...
absolut 09.05.2010 11:28 # 0