5 EYLÜL 2009, CUMARTESİ
Daha verimli olan C, dizeleri bitiÅŸtirmek?
Bu iki yöntem arasında dizeleri bitiştirmek için geldim:
Ortak bölüm:
char* first= "First";
char* second = "Second";
char* both = malloc(strlen(first) strlen(second) 2);
Yöntem 1:
strcpy(both, first);
strcat(both, " ");
strcat(both, second);
Yöntem 2:
sprintf("%s %s", first, second);
Her iki durumda da both
** 11 * olurdu.
Daha verimli (çeşitli birleştirme işlemleri gerçekleştirmek için var) olan, ya da eğer bunu yapmak için daha iyi bir yol biliyorsanız öğrenmek isterim.
Zaman ayırdığınız için teşekkürler.
EDİT: uzay dizeleri, yer olabilirdi bu durumda
CEVAP
5 EYLÜL 2009, CUMARTESİ
Okunabilirlik için, ile gitmek istiyorum
char * s = malloc(snprintf(NULL, 0, "%s %s", first, second) 1);
sprintf(s, "%s %s", first, second);
Eğer platform GNU uzantıları destekliyorsa, ayrıca asprintf()
kullanabilirsiniz:
char * s = NULL;
asprintf(&s, "%s %s", first, second);
Eğer MS C çalışma Zamanı ile sıkışmış iseniz, _scprintf()
elde edilen dize uzunluğunu belirlemek için kullanmanız gerekir:
char * s = malloc(_scprintf("%s %s", first, second) 1);
sprintf(s, "%s %s", first, second);
Aşağıdaki büyük olasılıkla en hızlı çözüm olacaktır:
size_t len1 = strlen(first);
size_t len2 = strlen(second);
char * s = malloc(len1 len2 2);
memcpy(s, first, len1);
s[len1] = ' ';
memcpy(s len1 1, second, len2 1); // includes terminating null
Bunu PaylaÅŸ:
Sözlük vs ve neden?daha verimli olan N...
Nasıl verimli bir şekilde Gidip dizele...
Nasıl GRUP kullanmak için MySQL dizele...
C# ADO.NET: boÅŸluk ve DbNull -- orada ...
Python ile daha hızlı olan: x**.5 veya...