42 Tokyoのプロジェクトの一つです。標準ライブラリの一部の関数を模倣したカスタム C ライブラリです。
libftは、C言語の標準ライブラリ関数を自作で実装することで、メモリ管理、文字列操作、リンクリストなどの基礎的なプログラミング概念を学習するためのプロジェクトです。42スクールのカリキュラムの一環として作成されています。
42_libft/
├── Makefile # ビルド設定
├── libft.h # ヘッダーファイル
├── ft_*.c # 各関数の実装ファイル
└── README.md # このファイル
ft_isalpha
- アルファベットかどうかを判定ft_isdigit
- 数字かどうかを判定ft_isalnum
- 英数字かどうかを判定ft_isascii
- ASCII文字かどうかを判定ft_isprint
- 印刷可能文字かどうかを判定
ft_toupper
- 小文字を大文字に変換ft_tolower
- 大文字を小文字に変換
ft_strlen
- 文字列の長さを取得ft_strchr
- 文字列内で文字を検索ft_strrchr
- 文字列内で文字を逆方向検索ft_strncmp
- 文字列を指定文字数分比較ft_strlcpy
- 安全な文字列コピーft_strlcat
- 安全な文字列連結ft_strnstr
- 部分文字列を検索ft_strdup
- 文字列を複製
ft_memset
- メモリブロックを指定値で埋めるft_bzero
- メモリブロックをゼロクリアft_memcpy
- メモリブロックをコピーft_memmove
- 重複可能なメモリコピーft_memchr
- メモリブロック内でバイトを検索ft_memcmp
- メモリブロックを比較ft_calloc
- ゼロ初期化されたメモリを割り当て
ft_substr
- 部分文字列を抽出ft_strjoin
- 文字列を連結ft_strtrim
- 文字列の前後から指定文字を削除ft_split
- 区切り文字で文字列を分割ft_itoa
- 整数を文字列に変換ft_strmapi
- 文字列の各文字に関数を適用ft_striteri
- 文字列の各文字にインデックス付き関数を適用
ft_atoi
- 文字列を整数に変換
ft_putchar_fd
- ファイルディスクリプタに文字を出力ft_putstr_fd
- ファイルディスクリプタに文字列を出力ft_putendl_fd
- ファイルディスクリプタに文字列と改行を出力ft_putnbr_fd
- ファイルディスクリプタに数値を出力
ft_lstnew
- 新しいリストノードを作成ft_lstadd_front
- リストの先頭にノードを追加ft_lstsize
- リストのサイズを取得ft_lstlast
- リストの最後のノードを取得ft_lstadd_back
- リストの末尾にノードを追加ft_lstdelone
- 指定ノードを削除ft_lstclear
- リスト全体をクリアft_lstiter
- リストの各ノードに関数を適用ft_lstmap
- リストの各ノードに関数を適用して新しいリストを作成
make # 基本関数のみビルド
make bonus # ボーナス関数も含めてビルド
make clean # オブジェクトファイルを削除
make fclean # すべてのビルド成果物を削除
make re # リビルド
#include "libft.h"
int main(void)
{
char *str = ft_strdup("Hello, libft!");
ft_putstr_fd(str, 1);
free(str);
return 0;
}
コンパイル時にライブラリをリンク:
gcc -Wall -Wextra -Werror your_program.c -L. -lft
- メモリ安全: 適切なメモリ管理とエラーハンドリング
- エッジケース対応: NULL ポインタや境界値の適切な処理
- 効率性: 最適化されたアルゴリズムの実装
- 互換性: 標準ライブラリ関数との高い互換性
- 拡張性: ボーナス部分でリンクリスト操作を提供
このプロジェクトを通じて以下のスキルを習得できます:
- C言語の基礎的な理解
- メモリ管理の技術
- アルゴリズムとデータ構造の実装
- エラーハンドリングの重要性
- プロジェクト構造化と Makefile の作成
- 標準ライブラリ関数の内部動作の理解
すべての動的メモリ割り当て関数は適切なエラーチェックを含み、失敗時にはNULLを返します。
安全な文字列操作を重視し、バッファオーバーフローを防ぐために strlcpy
や strlcat
などの安全な関数を実装しています。
汎用的な void *
を使用してどのデータ型でも格納可能な柔軟なリンクリスト実装を提供します。
- 作成者: kmiyazaw
- 学校: 42 Tokyo
- 作成日: 2023年5月21日
- 最終更新: 2023年12月18日
このプロジェクトは 42 Tokyo の教育カリキュラムの一部として作成されました。