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ş:
Nasıl verimli bir şekilde Gidip dizele...
Sözlük vs ve neden?daha verimli olan N...
Verimli büyük set düşük Hamming uzaklı...
Olan, Karma arama veya İkili arama dah...
Nasıl sqlite dolgu ile dizeleri bitişt...