This project has been created as part of the 42 curriculum by bshoda.
Libft は、42 カリキュラムで今後の C プロジェクトに再利用するための、 自作 C ライブラリです。
このプロジェクトの目的は、よく使われる標準ライブラリ関数の動作を再実装し、文字列操作、メモリ操作、動的メモリ確保、連結リストの 基礎を理解することです。
ライブラリは libft.a という静的ライブラリとして作成され、他の C プログラムに
リンクして使用できます。
以下の関数は、libc の標準関数と同じような動作をするように、ft_ プレフィックス
付きで再実装したものです。
ft_isalpha: 引数が英字であれば1、それ以外であれば0を返すft_isdigit: 引数が数字であれば1、それ以外であれば0を返すft_isalnum: 引数が英数字であれば1、それ以外であれば0を返すft_isascii: 引数が ASCII 文字の範囲内であれば1、それ以外であれば0を返すft_isprint: 引数が表示可能文字であれば1、それ以外であれば0を返す
ft_toupper: 小文字の英字を大文字に変換し、それ以外の文字はそのまま返すft_tolower: 大文字の英字を小文字に変換し、それ以外の文字はそのまま返す
ft_strlen: 文字列の長さを数えるft_strchr: 文字列の先頭から指定文字を探し、最初に見つかった位置を返すft_strrchr: 文字列の末尾側から指定文字を探し、最後に見つかった位置を返すft_strncmp: 2つの文字列を最大n文字まで比較するft_strnstr: 指定された長さの範囲内で、文字列の中から別の文字列を探すft_strlcpy: サイズを考慮しながら文字列をコピーし、コピー元文字列の長さを返すft_strlcat: サイズを考慮しながら文字列を連結し、作成しようとした文字列の長さを返すft_atoi: 文字列をint型の整数に変換する
ft_memset: 指定したメモリ領域を指定バイトで埋めるft_bzero: 指定したメモリ領域をゼロで埋めるft_memcpy: メモリ領域をコピーする。重なり合う領域のコピーは未定義動作ft_memmove: メモリ領域をコピーする。重なり合う領域にも対応するft_memchr: 指定したメモリ領域から指定バイトを探すft_memcmp: 2つのメモリ領域を指定バイト数だけ比較する
ft_calloc: 指定した個数とサイズのメモリを確保し、ゼロ初期化して返すft_strdup: 文字列を複製し、新しく確保したメモリへのポインタを返す
以下の関数は、標準 libc には含まれていない、または別の形で存在する便利な関数です。
ft_substr: 文字列から部分文字列を作成するft_strjoin: 2つの文字列を連結した新しい文字列を作成するft_strtrim: 文字列の先頭と末尾から指定文字を取り除くft_split: 区切り文字で文字列を分割し、NULL 終端された配列を返すft_itoa: 整数を文字列に変換するft_strmapi: 各文字に関数を適用し、新しい文字列を作成するft_striteri: 各文字に関数を適用し、文字列を直接変更するft_putchar_fd: 指定したファイルディスクリプタに1文字を書き込むft_putstr_fd: 指定したファイルディスクリプタに文字列を書き込むft_putendl_fd: 指定したファイルディスクリプタに文字列と改行を書き込むft_putnbr_fd: 指定したファイルディスクリプタに整数を書き込む
libft.h では、以下の連結リスト構造体を定義しています。
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;連結リスト操作用の関数は以下の通りです。
ft_lstnew: 新しいノードを作成するft_lstadd_front: リストの先頭にノードを追加するft_lstsize: リスト内のノード数を数えるft_lstlast: リストの最後のノードを返すft_lstadd_back: リストの末尾にノードを追加するft_lstdelone: 指定したノードを解放するft_lstclear: 指定したノード以降をすべて解放するft_lstiter: 各ノードのcontentに関数を適用するft_lstmap: 各ノードのcontentに関数を適用し、新しいリストを作成する
ライブラリをコンパイルします。
make実行すると、以下の静的ライブラリが作成されます。
libft.a
オブジェクトファイルを削除します。
make cleanオブジェクトファイルとライブラリを削除します。
make fclean最初から再ビルドします。
make re使用例:
#include "libft.h"
int main(void)
{
ft_putendl_fd("Hello from libft!", 1);
return (0);
}libft.a と一緒にコンパイルします。
cc -Wall -Wextra -Werror main.c libft.a- このプロジェクトは C 言語で書かれています。
- すべてのソースファイルはリポジトリのルートに配置しています。
- コンパイルには
ccと-Wall -Wextra -Werrorを使用します。 - 静的ライブラリは
ar rcsで作成します。 - グローバル変数は使用しません。
- 1つのソースファイル内でのみ使う補助関数は
staticにします。 - 呼び出し元に返された動的メモリは、必要に応じて呼び出し元が解放します。
strlen,memcpy,strlcpy,calloc,atoiなどのmanページ- 42 Libft subject PDF
AIは関数の処理内容の確認において利用しました。