SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • SignatureSeries

    SignatureSer

    24 Aralık 2006