İki dizim var, str1 ve str2. Onları yığındaki boşlukta birleştirmek istiyorum. Ben kullanarak onlar için yer malloc:Bir dize için malloc boşluğa giden yolu düzeltin ve daha sonra karakterleri o alana mı ekleyin?
char *concat = (char*) malloc(strlen(str1) + strlen(str2) + 1);
Sadece yapabilir:
strcat(concat, str1);
strcat(concat, str2);
Ve concat bana iki dizeleri ile öbek üzerinde yer concatted verecek? Ben soruyorum çünkü strcat aslında str1'i malloc kullanarak ayrılmış alanın sonuna ekleyecektir. Bu doğru mu? Öyleyse, str1, strlen (str1) + strlen (str2) + 1 olarak görünecektir.
Sormamın nedeni, yukarıdaki yöntemi kullanıyorum, ancak hata durumunda bir hata alıyorum:
strcpy(concat, str1);
strcat(concat, str2);
strcat orada boş sonlandırıcı olmanın dayanır ('\ 0') nerede olduğunu bilmek: Koşullu atlama veya taşıma bir strcpy ve daha sonra bir strcat yapmak istiyorum başlatılmamış değer (ler)
+1 Bunu yapmak için kesinlikle çok iyi bir yol. Muhtemelen 'memcpy()' yerine memmove() 'yi kullanırım, çünkü memcpy() bu durumda güvenli olsa da, her zaman güvenli değildir, ancak memmove() her zaman güvenlidir. –
'memmove' kullanmayın burada; kafa karıştırıcı. Herhangi bir 'memmove' kullanımı, çok farklı ve sıra dışı bir şey yaptığınızı belgelemeye hizmet etmelidir. 'Memmove' görürsem bir dakika ya da iki harcadım, neden # * $ @ birisinin onu kullandığını anlamaya çalışıyorum ve eğer balık bir şey oluyorsa ... –