This project has been created as part of the 42 curriculum by syokota.
C言語の標準ライブラリ (libc) 内で使用頻度の高い関数群、高度な文字列操作やファイルディスクリプタを指定した出力を行う拡張ユーティリティ関数群、ポインタを使用した動的なデータ構造を扱うための連結リストを操作する関数群で構成される、オリジナルの静的ライブラリを作成するプロジェクトです。
ここで作成された静的ライブラリ(libft.a)は、別のC言語のプロジェクトにおいて利用可能です。
すべての関数ファイル (*.c) は、cc -Wall -Wextra -Werror のフラグでコンパイルされます。
makeまたはmake all: 関数をコンパイルし、libft.aを作成します。make clean: コンパイル時に生成されたオブジェクトファイル (*.o) を削除します。make fclean: オブジェクトファイル (*.o) と libft.a を削除します。make re: ライブラリを再コンパイルします。
このライブラリを別のプロジェクトで使用する際には、以下の手順で使用できます。
新しいプロジェクトのディレクトリ内に、libftのフォルダ (libft.h, libft.a)を配置します。
.cファイルの先頭で、ヘッダーを読み込みます。
#include "libft/libft.h" // パスは配置場所に合わせて調整
コンパイラにlibftの場所を指定する必要があります。
-I: ヘッダファイルがある場所を指定-L: ライブラリファイル (.a) がある場所を指定-l: ライブラリ名を指定 (libft.aの場合、ftと記述)
cc main.c -I./libft -L./libft -lft
- 文字判定
- ft_isalpha : アルファベットを識別する関数
- ft_isdigit : 数字を識別する関数
- ft_isalnum : アルファベットと数字を識別する関数
- ft_isascii : アスキー文字を識別する関数
- ft_isprint : 表示文字を識別する関数
- 文字操作
- ft_toupper : 小文字を大文字に変換する関数
- ft_tolower : 大文字を小文字に変換する関数
- 文字列操作
- ft_strlen : 文字列の長さを図る関数
- ft_strlcpy : 指定された長さ分の文字をコピーする関数
- ft_strlcat : 指定された長さ分だけ、指定された文字列を別の文字列の後ろにつなげ、文字数の合計を返す関数
- ft_strchr : 文字列の先頭から、指定した文字が存在するかを調べる関数
- ft_strrchr : 文字列の後ろから、指定した文字が存在するかを調べる関数
- ft_strncmp : 指定した文字数内で、2つの文字列の要素を比較する関数
- ft_strnstr : 指定した文字列内に、指定した文字列が含まれているかを調べる関数
- メモリ操作
- ft_memset : 指定したメモリ領域に指定した長さ分だけ、指定した文字を埋める関数
- ft_bzero : 指定したメモリ領域に指定した長さ分だけ、
"\0"を埋める関数 - ft_memcpy : 指定した長さ分だけ、指定したメモリ領域を前から別のメモリ領域にコピーする関数
- ft_memmove : 指定した長さ分だけ、指定したメモリ領域を前ももしくは後ろから別のメモリ領域に移動させる関数
- ft_memchr : 指定した長さ分だけ、指定したメモリ領域に特定の文字が存在するかを調べる関数
- ft_memcmp : 指定した長さ分だけ、指定した2つのメモリ領域の要素を比較する関数
- 変換、メモリ確保
- ft_atoi : 符号と数字で表された文字列をint型の整数に変換する関数
- ft_calloc : 指定された長さ分だけ、ヒープ領域にメモリを確保し、
"\0"を埋める関数 - ft_strdup : 指定された文字列を、ヒープ領域で確保した領域に複製する関数
- 文字列処理
- ft_substr : 指定された長さ分だけ、文字列を指定されたインデックスからコピーする関数
- ft_strjoin : 2つの文字列同士を連結する関数
- ft_strtrim : 文字列の前後から、特定の文字を切り取る関数
- ft_split : 指定された区切り文字で、文字列を分解し、配列に格納していく関数
- ft_itoa : int型の整数を文字列に変換する関数
- ft_strmapi : 指定された文字列のすべてのインデックスに対して、任意の処理を施し、別の文字列として複製する関数
- ft_striteri : 指定された文字列のすべてのインデックスに対して、任意の処理を施す関数
- ファイル出力
- ft_putchar_fd : 任意のfdに文字を書き出す関数
- ft_pustr_fd : 任意のfdに文字列を書き出す関数
- ft_putendl_fd : 任意のfdに文字列を書き出し、最後に改行を加える関数
- fd_putnbr_fd : int型の整数を受け取り、任意のfdに符号または数字の文字列を書き出す関数
- リスト操作
- ft_lstnew : 新たなリストを作成する関数
- ft_lstadd_front : 新たなノードをリストの最前列に作成する関数
- ft_lstsize : リストのノード数を数える関数
- ft_lstlast : リストの最後のノードの位置を調べる関数
- ft_lstadd_back : 新たなノードをリストの最後尾に作成する関数
- ft_lstdelone : 特定のノードを削除する関数
- ft_lstclear : 特定のリストを削除する関数
- ft_lstiter : 特定のリスト内のすべてのノードに対して、任意の処理を施す関数
- ft_lstmap : 特定のリスト内のすべてのノードに対して、任意の処理を施し、別のリストとして複製する関数
- man page(glibc) - 標準関数の仕様や挙動の主要なリファレンスとして使用。
- man page(BSD) - glibcとの違いを比較するために使用。
AIの使用について:本プロジェクトにおいて、AIは学習支援ツールとして使用しました。
- 複雑なエラーメッセージの解読と原因特定
- NULLポインタと\0の違いの理解
- 関数ポインタや連結リストの概念的な理解
README.mdの構成およびMarkdown形式のファイルの書き方- 別プロジェクへの自作ライブラリの導入方法
- エッジケースに対応したテストファイルの作成
.oと.aファイルの違いとコンパイル動作の大まかな流れ
(プリプロセッサからアセンブラ言語へ翻訳し、リンカーによる結合まで)の理解- fdとシステムコールの概念的な理解