C, String Veriler – Char Veri Türü

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.

merhabadunya\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]
abcd\0

Başka bir örneğe bakalım:

123char 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;
}

Yayınlayan

Ahmet KADAK

Bilgisayar Öğretmeni & Bilgisayar Mühendisi

Bir yanıt yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir