C dilinde char tipi tamsayı tipidir çünkü C’nin altında karakterler yerine tamsayılar depolanır.
C’de char değerleri 1 byte bellekte saklanır ve değer aralığı -128 ile 127 veya 0 ile 255 arasındadır. Karakterleri temsil etmek için, bilgisayarın sayısal bir kod kullanarak her bir tam sayıyı karşılık gelen bir karakterle eşlemesi gerekir. En yaygın sayısal kod, American Standard Code for Information Interchange anlamına gelen ASCII’dir.
char char_variable = 'A';
#include <stdio.h> #include <stdlib.h> int main() { char character = 'Z'; printf("character = %c\n",character); printf("character = %d,Stored as integer\n", character); return 0; }
Ekrann görüntüsü
character = Z character = 90, hence an integer
Bazı fonksiyonlar
int islower(ch)
int isupper(ch)
isalpha(ch)
int isdigit(ch);
int ispunct(ch); //noktalama işareti mi
int isspace(ch)

Char String Dizisi
C programlama dilinde, bir string, \0
ile sonlandırılmış bir karakter dizisidir.
char c[] = "merhaba dunya";
Derleyici, çift tırnak işaretleri içine alınmış bir dizi karakterle karşılaştığında, varsayılan olarak sonuna bir null karakteri \0
ekler.
m | e | r | h | a | b | a | d | u | n | y | a | \0 |
Stringleri şu şekilde bildirebilirsiniz:
char s[5];
s[0] | s[1] | s[2] | s[3] | s[4] |
char c[] = "abcd"; char c[50] = "abcd"; char c[] = {'a', 'b', 'c', 'd', '\0'}; char c[5] = {'a', 'b', 'c', 'd', '\0'};
c[0] | c[1] | c[2] | c[3] | c[4] |
a | b | c | d | \0 |
Başka bir örneğe bakalım:
123 | char c[5] = “abcde”; |
Burada 5 karakterlik bir karakter dizisine 6 karakter (son karakter ‘\ 0’) atamaya çalışıyoruz. Bu kötü ve bunu asla yapmamalısın.
char name[7];
char name[7] = { 'F', 'l', 'a', 'v', 'i', 'o' };
char name[7] = "Flavio";
printf("%s", name);
Fark ettiniz mi “Flavio” 6 karakter uzunluğunda ama ben 7 uzunluğunda bir dizi tanımladım? Neden? Niye? Bunun nedeni, bir dizedeki son karakterin \0 değeri olması, dize sonlandırıcı olması ve onun için boşluk açmamız gerektiğidir.
#include <string.h> strcpy() // bir char dizisini diğerine kopyalar strcat() //Bir char dizisini diğerine ekler strcmp() //iki dizinin eşitliğini karşılaştırır strncmp() //iki dizinin ilk n karakterini karşılaştırmak için strlen() // bir char dizisinin uzunluğunu verir.
Geriye String Döndüren Fonksiyonlar
xxxxx myName() { return "dijigo"; }
C’deki dizeler, char öğelerinin dizileridir, bu nedenle gerçekten bir dize döndüremeyiz – dizenin ilk öğesine bir işaretçi döndürmeliyiz.
Bu yüzden const char* kullanmamız gerekiyor.
const char* myName() { return "dijigo"; }
#include <stdio.h> const char* myName() { return "dijigo"; } int main(void) { printf("%s", myName()); }
const char* name = myName();
Tüm formlar tamamen geçerlidir. Const kullanımına dikkat edin, çünkü işlevden bir sabit değer olan, çift tırnak içinde tanımlanmış bir dize olan bir sabit değer döndürüyorum. C’de bir dize hazır bilgisini değiştiremeyeceğinizi unutmayın. Akılda tutulması gereken başka bir şey de, bir C işlevinden yerel değişken olarak tanımlanan bir dize döndüremeyeceğinizdir, çünkü değişken, işlev yürütmeyi bitirdiğinde otomatik olarak yok edilecek (serbest bırakılacaktır) ve bu nedenle mevcut olmayacaktır. örneğin
#include <stdio.h> const char* myName() { char name[6] = "dijigo"; return name; } int main(void) { printf("%s", myName()); }
hello.c:5:10: warning: address of stack memory associated with local variable 'name' returned [-Wreturn-stack-address] return name; ^~~~ 1 warning generated. B��Z> K���⏎
Böyle bir uyarı alırsınız
Doğrusu
const char* myName() { char *name = "dijigo"; return name; }