{"id":22868194,"url":"https://github.com/faruktinaz/libft","last_synced_at":"2025-08-03T06:06:18.520Z","repository":{"id":155484735,"uuid":"580843736","full_name":"faruktinaz/libft","owner":"faruktinaz","description":"The purpose of this project is to re-code some libc functions, as well as other common utility functions to be reused in the subsequent 42 projects.","archived":false,"fork":false,"pushed_at":"2023-09-03T00:48:38.000Z","size":39,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-05T19:53:26.478Z","etag":null,"topics":["42","c","leaks","libc","libft"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/faruktinaz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-21T15:36:55.000Z","updated_at":"2023-07-04T16:57:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"440291ef-7c47-4fd1-bc41-07a6a783ec13","html_url":"https://github.com/faruktinaz/libft","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/faruktinaz/libft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faruktinaz%2Flibft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faruktinaz%2Flibft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faruktinaz%2Flibft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faruktinaz%2Flibft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faruktinaz","download_url":"https://codeload.github.com/faruktinaz/libft/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faruktinaz%2Flibft/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268500608,"owners_count":24260163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-03T02:00:12.545Z","response_time":2577,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42","c","leaks","libc","libft"],"created_at":"2024-12-13T12:32:15.096Z","updated_at":"2025-08-03T06:06:18.470Z","avatar_url":"https://github.com/faruktinaz.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"## About\n\n\u003e \u003cmark style=\"background: #D2B3FFA6;\"\u003e-EN-\u003c/mark\u003e  The purpose of this project is to re-code some libc functions, as well as other common utility functions to be reused in the subsequent 42 projects.\n\u003e \n\u003e \u003cmark style=\"background: #D2B3FFA6;\"\u003e-TR-\u003c/mark\u003e Bu projenin amacı, sonraki 42 projelerinde de kullanılmak üzere libc fonksiyonlarının işlevlerini ve diğer yardımcı fonksiyonlari yeniden kodlamaktır.\n\n## strlen\n\n``` c\nsize_t ft_strlen(const char *str)\n```\n\n'strlen' foksiyonu girilen char parametresininin \u003cmark style=\"background: #CACFD9A6;\"\u003euzunlugunu\u003c/mark\u003e döndürür.\n\n-------------------------------------------------------------\n## bzero\n\nbzero fonksiyonu, bir bellek alanını sıfırlamak için kullanılır.\n\n```c\nvoid bzero(void *s, size_t n);\n```\n\nBu fonksiyon, bir bellek alanının adresini `s` parametresiyle ve bu alanın uzunluğunu `n` parametresiyle verir. Bu fonksiyon çalıştırıldığında, verilen bellek alanındaki tüm değerler `0` olarak ayarlanır.\n\n-------------------------------------------------------------------------\n## memcpy\n\nmemcpy fonksiyonu, bir bellek alanının içeriğini başka bir bellek alanına kopyalamak için kullanılır.\n\n```c\nvoid *memcpy(void *dest, const void *src, size_t n);\n```\n\nBu fonksiyon, kopyalanacak verinin bulunduğu bellek alanının adresini \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e parametresiyle, kopyalanacak verinin kopyalanacağı bellek alanının adresini \u003cmark style=\"background: #CACFD9A6;\"\u003edest\u003c/mark\u003e parametresiyle ve kopyalanacak verinin uzunluğunu \u003cmark style=\"background: #CACFD9A6;\"\u003en\u003c/mark\u003e parametresiyle verir. Bu fonksiyon çalıştırıldığında, verilen \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e bellek alanındaki veri, verilen \u003cmark style=\"background: #CACFD9A6;\"\u003edest\u003c/mark\u003e bellek alanına kopyalanır.\n\nÖrnek olarak, aşağıdaki kod parçacığında, \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e adlı dizinin ilk 10 elemanı, \u003cmark style=\"background: #CACFD9A6;\"\u003edest\u003c/mark\u003e adlı dizinin ilk 10 elemanına kopyalanır:\n\n```c\nchar src[100];\nchar dest[100];\nmemcpy(dest, src, 10);\n```\n\n__memcpy fonksiyonu, veri kopyalamak için hızlı bir yöntemdir, ancak dikkat edilmesi gereken bir nokta vardır: memcpy fonksiyonu, verinin kopyalanacağı alan ile verinin bulunduğu alanın aynı olması durumunda, doğru sonuç verememektedir. Bu durumda, memmove fonksiyonunun kullanılması daha uygun olacaktır.__\n\n--------------------------------------------------------\n## memmove \n\nmemmove fonksiyonu, bir bellek alanının içeriğini başka bir bellek alanına kopyalamak için kullanılır.\n\n```c\nvoid *memmove(void *dest, const void *src, size_t n);\n```\n\nBu fonksiyon, kopyalanacak verinin bulunduğu bellek alanının adresini \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e parametresiyle, kopyalanacak verinin kopyalanacağı bellek alanının adresini \u003cmark style=\"background: #CACFD9A6;\"\u003edest\u003c/mark\u003e parametresiyle ve kopyalanacak verinin uzunluğunu \u003cmark style=\"background: #CACFD9A6;\"\u003en\u003c/mark\u003e parametresiyle verir. Bu fonksiyon çalıştırıldığında, verilen \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e bellek alanındaki veri, verilen \u003cmark style=\"background: #CACFD9A6;\"\u003edest\u003c/mark\u003e bellek alanına kopyalanır.\n\n__memmove fonksiyonu, veri kopyalamak için hızlı bir yöntemdir ve memcpy fonksiyonuna göre daha esnektir. Özellikle, verinin kopyalanacağı alan ile verinin bulunduğu alanın aynı olması durumunda, memmove fonksiyonu doğru sonuç verebilir, ancak memcpy fonksiyonu bu durumda doğru sonuç veremeyebilir. Bu nedenle, verinin kopyalanacağı alan ile verinin bulunduğu alanın aynı olma durumu düşünülürse, memmove fonksiyonunun kullanımı daha uygun olacaktır.__\n\nBu denilene bir örnek verelim:\n\n\n```c\nint main()\n\n{\nchar str[] = \"aabbcc\";\n\nft_memcpy(str + 2, str , 4);\n\nprintf(\"%s\\n\", str);\n\nchar str2[] = \"aabbcc\";\n\nft_memmove(str2 + 2 , str2, 4);\n\nprintf(\"%s\", str2);\n}\n```\nbu kodun çıktısı:\n\t\t\taaaaaa\n\t\t\taaaabb\nolur.\n\nmemcpy ve memmove fonksiyonları, bir bellek alanının içeriğini başka bir bellek alanına kopyalamak için kullanılırlar. Ancak, bu iki fonksiyon arasında önemli bir fark vardır:\n\n-   memcpy fonksiyonu, verinin kopyalanacağı alan ile verinin bulunduğu alanın aynı olması durumunda, doğru sonuç veremeyebilir. Bu durumda, verinin bulunduğu alandaki veri, verinin kopyalanacağı alana kopyalanmadan önce sıfırlanabilir ve böylece doğru sonuç alınamaz.\n    \n-   memmove fonksiyonu ise, verinin kopyalanacağı alan ile verinin bulunduğu alanın aynı olması durumunda da doğru sonuç verebilir. Bu fonksiyon, verinin kopyalanacağı alana kopyalanmadan önce sıfırlamaz ve böylece verinin bulunduğu alandaki veri kaybolmaz.\n\n--------------------------------------------------------\n## memset\n\nmemset fonksiyonu, bir bellek alanını bir verilen değer ile doldurmak için kullanılır.\n\n```c\nvoid *memset(void *s, int c, size_t n);\n```\n\nBu fonksiyon, bir bellek alanının adresini `s` parametresiyle, bellek alanını doldurmak istediğiniz değeri `c` parametresiyle ve bu alanın uzunluğunu `n` parametresiyle verir. Bu fonksiyon çalıştırıldığında, verilen bellek alanındaki tüm değerler `c` değeri olarak ayarlanır.\n\n```c\nvoid *ft_memset(void *dst, int src, size_t n);\n```\n\n'memset' fonksiyonu girilen dest parametresinin \u003cmark style=\"background: #CACFD9A6;\"\u003ebellekteki\u003c/mark\u003e kısmını, belirtilen bir değer ile doldurmak için kullanılır.\n\nÖrnek olarak, aşağıdaki kod parçacığı bir dizinin tüm elemanlarını sıfırlar:\n\n```c\nint arr[10];\nmemset(arr, 0, sizeof(arr));\n```\n\n-------------------------------------------------------------\n## strlcpy\n\n```c\nsize_t ft_strlcpy(char *dst, const char *src, size_t size);\n```\n\n\u003e 'strlcpy' fonksiyonu girilen \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e parametresini \u003cmark style=\"background: #CACFD9A6;\"\u003edest\u003c/mark\u003e parametresine \u003cmark style=\"background: #CACFD9A6;\"\u003esize\u003c/mark\u003e parametresi kadar kopyalanmasını sağlar.\n\n-------------------------------------------------------------\n## strlcat\n\n\n```c\nsize_t ft_strlcat(char *dst, const char *src, size_t size);\n```\n\n'strlcat' fonksiyonu \u003cmark style=\"background: #CACFD9A6;\"\u003edst\u003c/mark\u003e parametresinin devamına \u003cmark style=\"background: #CACFD9A6;\"\u003esrc\u003c/mark\u003e parametresi ile \u003cmark style=\"background: #CACFD9A6;\"\u003esize\u003c/mark\u003e kadar  birleştirilmesini sağlar.\n\n-------------------------------------------------------------\n\n## strjoin\n\nstrjoin fonksiyonu bir dizi veya liste içindeki öğeleri \u003cmark style=\"background: #CACFD9A6;\"\u003ebirleştirerek\u003c/mark\u003e  ___yeni___ bir metin dizesi oluşturur.\n\n-------------------------------------------------------------\n## split\n\nsplit fonksiyonu girilen diznin tamamında aranan char karakterini bulup her buldugunda malloc ile oluşturulmuş bir listeye aktarılır.\n\nsınırlayıcı olarak belirtilen karakterle bölme işlemini yapıp ayrılmış kelimeleri ayrı bir dizeye yerleştirir. \n\nbu fonksiyonu yazarken 2 static fonksiyona ihtiyaç duyulur.\n1. static fonksiyon static int worldcounter(const char *s, char c)\n2. static int charcounter \n\n| harici fonksiyonlar | malloc | free |\n\nörnek olarak ;\n```c\nchar *string = \"   split     this  for me !    \";\nchar **expected = ((char *[6]){\"split\",\"this\",\"for\",\"me\",\"!\",NULL});\n```\n\n----------------------------------------------------\n\n## strtrim\n\nstrtrim fonksiyonu bir dizinin içerisinde \u003cmark style=\"background: #CACFD9A6;\"\u003ebaşından ve sonundan\u003c/mark\u003e kırpılacak harfleri kırpılmış şekilde malloc ile yer ayrılmış olan yeni bir diziye return edilir. \n\n-------------------------------------------------------------\n## calloc\n\ncalloc fonksiyonu, bellekte belirli bir boyutta bir dizi oluşturmak için kullanılır. Bu fonksiyon, bellekte istenilen miktarda yer açar ve bu yerin tüm elemanlarını sıfır olarak ayarlar. Örneğin, aşağıdaki kod parçacığı, bellekte 10 elemanlı bir dizi oluşturur ve bu dizinin tüm elemanlarını sıfır olarak ayarlar:\n\n```c\nint *array = (int*) calloc(10, sizeof(int));\n```\n\ncalloc fonksiyonu, iki parametre alır: ilki, oluşturulacak dizinin eleman sayısıdır ve ikincisi, her bir elemanın boyutudur (genellikle veri tipine göre sizeof operatörü kullanılarak belirlenir). Örneğin, yukarıdaki kod parçacığında, 10 elemanlı bir dizi oluşturulur ve her bir elemanın boyutu sizeof(int) yani 4 bayt olduğu için, toplamda 40 bayt bellek ayırılır.\n\ncalloc fonksiyonu, malloc fonksiyonundan farklı olarak, oluşturulan dizinin tüm elemanlarını sıfır olarak ayarlamakla birlikte aynı zamanda bellekte istenilen miktarda yer açar. Bu sayede, calloc fonksiyonu malloc fonksiyonuna göre daha güvenlidir, çünkü malloc fonksiyonu sadece bellekte yer açar ve bu yerin içeriğini değiştirmez, bu yüzden kullanıcının dizinin tüm elemanlarını ayrı ayrı sıfır olarak ayarlaması gerekir.\n\n-----------------------------------------------------------------------------------------\n## atoi\n\natoi(ascii to integer) fonksiyonu string ifadeyi integer değere çevirir.\n\n```c\nint ft_atoi(const char *str);\n```\n\nreturn değeri olarak integer bir değer döndürür.\n\n------------------------------------------------------------------------\n## substr\n\n substr() fonksiyonu, bir metnin belirli bir kısmını almak için kullanılır. Bu fonksiyonu kullanırken, bir dizge (veya metin) ve dizgenin hangi karakterlerinin alınacağını gösteren iki tane sayı girdisi vermeniz gerekir. İlk sayı, dizgenin hangi karakterinden başlayarak alınacağını gösterir ve ikinci sayı ise alınacak karakterlerin sayısını gösterir. Örneğin, aşağıdaki örnekte, \u003cmark style=\"background: #CACFD9A6;\"\u003e\"merhaba dunya\"\u003c/mark\u003e dizgesinin \u003cmark style=\"background: #CACFD9A6;\"\u003e3'üncü karakterinden itibaren\u003c/mark\u003e 4 adet karakter alınır:\n \n```c\nint main()\n{\nchar string[] = \"merhaba dunya!\";\nprintf(\"%s\", ft_substr(string,3,4));\n}\n```\n\nSonuç olarak, substring değişkeni \u003cmark style=\"background: #CACFD9A6;\"\u003e\"haba\"\u003c/mark\u003e değerini alacaktır.\n\nKarakter saymak 0. indeksten başlar ilk karakter 0, ikinci karakter 1, üçüncü karakter 2, vb.\n\n-----------------------------------------------------------------------\n## strdup\n\nDizinin bir kopyasını oluşturur ve oluşturulan kopyanın başlangıç adresini döndürür.\n\n```c\nchar *ft_strdup(const char *s);\n```\n\n\n## strchr\n\n```c\nchar *ft_strchr(const char *str, int c)\n```\n\n\u003cmark style=\"background: #CACFD9A6;\"\u003e\"strchr\"\u003c/mark\u003e fonksiyonu, bir dizinin verilen bir karakteri ilk kez nerede bulunduğunu arar. Bu fonksiyon, bir dizi içinde verilen bir karakteri arar ve ilk bulduğu yerde dizinin adresini döndürür.Eğer verilen karakter dizide bulunamazsa, bu fonksiyon \u003cmark style=\"background: #CACFD9A6;\"\u003e\"NULL\"\u003c/mark\u003e değerini döndürür.\n\n## strrchr\n\n```c\nchar *ft_strrchr(const char *s, int c)\n```\n\n\"strrchr\" fonksiyonu \"strchr\" fonkisyonunn yaptıgı işlevin aynısını tersten yapar.\n\n## strncmp\n\n```c\nint ft_strncmp(const char *s1, const char *s2, size_t n)\n```\n\n\"strncmp\" fonksiyonu, iki dizinin verilen bir uzunluk kadar bölümünü karşılaştırır. Bu fonksiyon, iki dizinin verilen bir uzunluk kadar bölümünü karşılaştırır ve eğer diziler eşitse, 0 değerini, eğer ilk dizi büyükse, pozitif bir değer, eğer ikinci dizi büyükse ise negatif bir değer döndürür.\n\n## memchr \n\n```c\nvoid *ft_memchr(const void *str, int c, size_t n)\n```\n\n\"memchr\" fonksiyonu, verilen bir bellek alanının verilen bir karakteri ilk kez nerede bulunduğunu arar. İlk buldugu yerin bellek alanının adresini döndürür. Eğer verilen karakter bellek alanında bulunamazsa, bu fonksiyon \"\u003cmark style=\"background: #CACFD9A6;\"\u003eNULL\u003c/mark\u003e\" değerini döndürür.\n## memcmp\n\n```c\nvoid *ft_memchr(const void *str, int c, size_t n)\n```\n\n\"memcmp\" fonksiyonu, iki bellek alanının verilen bir uzunluk kadar bölümünü karşılaştırır. Bu fonksiyon, iki bellek alanının verilen bir uzunluk kadar bölümünü karşılaştırır ve eğer bellek alanları eşitse, 0 değerini, eğer ilk bellek alanı büyükse, pozitif değer, eğer ikinci bellek alanı büyükse negatif değer döndürür.\n\n## statik ve dinamik fonksiyon nedir ?\n\nStatik fonksiyonlar, derleme zamanında yüklenir ve çalışma zamanında değiştirilemez. Statik fonksiyonlar, genellikle programın çalışma zamanında çok az hafıza kullanır ve çalışma hızı yüksektir. Statik fonksiyonlar, çalışma zamanında değiştirilemeyen sabit değerler veya işlemler için kullanılır. Örneğin, bir fonksiyonun sadece bir tamsayı çarpımını gerçekleştirip geri döndürmesi gibi.\n\nDinamik fonksiyonlar ise, çalışma zamanında yüklenir ve değiştirilebilir. Dinamik fonksiyonlar, genellikle programın çalışma zamanında daha fazla hafıza kullanır ve çalışma hızı daha düşüktür. Dinamik fonksiyonlar, çalışma zamanında değiştirilebilen değerler veya işlemler için kullanılır. Örneğin, bir fonksiyonun kullanıcıdan alınan bir dizeyi ters çevirerek geri döndürmesi gibi.\n\nGenellikle, statik fonksiyonlar daha hızlı çalışır ve daha az hafıza kullanır, ancak dinamik fonksiyonlar daha esnektir ve çalışma zamanında değiştirilebilir. Hangi tür fonksiyon kullanılması gerektiği, programın gereksinimlerine ve amaçlarına göre değişebilir.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaruktinaz%2Flibft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaruktinaz%2Flibft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaruktinaz%2Flibft/lists"}