C'de bir dizeye tek bir karakteri nasıl eklerim?
Yani
char* str = "blablabla";
char c = 'H';
str_append(str,c); /* blablablaH */
C'de bir karakteri bir dizeye eklemek için, öncelikle dizeyi içeren bellek tamponunun fazladan bir karakteri barındıracak kadar büyük olduğundan emin olmanız gerekir. Örnek programınızda, verilen değişmez dize değiştirilemeyeceği için yeni, ek bir bellek bloğu ayırmanız gerekir.
İşte bir örnek:
#include <stdlib.h>
int main()
{
char *str = "blablabla";
char c = 'H';
size_t len = strlen(str);
char *str2 = malloc(len + 1 + 1 ); /* one for extra char, one for trailing zero */
strcpy(str2, str);
str2[len] = c;
str2[len + 1] = '\0';
printf( "%s\n", str2 ); /* prints "blablablaH" */
free( str2 );
}
İlk olarak, giriş dizesinin tüm karakterlerini, eklenecek ekstra karakteri ve son sıfırı barındıracak kadar büyük yeni bir bellek parçası ayırmak için malloc
kullanın. Ardından giriş dizesini yeni arabelleğe kopyalamak için strcpy
çağırın. Son olarak, eklenecek karakteri ve sondaki sıfırı eklemek için yeni tampondaki son iki baytı değiştirin.
char* str = "blablabla";
Bu dizeyi hiçbir şekilde değiştirmemelisiniz. Uygulama tanımlı salt okunur bölgede bulunur. Değiştirilmesi Tanımlanmamış Davranışa neden olur.
Bir karakter dizisine ihtiyacınız var, string literal'e değil.
İyi okumalar: char a[] = "string"; ve char *p = "string"; arasındaki fark nedir?
C'de bu şekilde bir string bildirebileceğinizi sanmıyorum. Bunu sadece const char için yapabilirsiniz ve tabii ki const olduğu için bir const char 'ı değiştiremezsiniz.
Dinamik char dizisi kullanabilirsiniz ancak yeniden ayırma işlemine dikkat etmeniz gerekecektir.
DÜZENLEME: aslında bu sözdizimi doğru derlenir. Yine de str'nin işaret ettiği şeyi değiştirmemelisiniz, eğer str sizin yaptığınız şekilde başlatılmışsa (string literal'den)