Skip to content

Latest commit

 

History

63 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This project has been created as part of the 42 curriculum by bshoda.

Libft

概要

Libft は、42 カリキュラムで今後の C プロジェクトに再利用するための、 自作 C ライブラリです。

このプロジェクトの目的は、よく使われる標準ライブラリ関数の動作を再実装し、文字列操作、メモリ操作、動的メモリ確保、連結リストの 基礎を理解することです。

ライブラリは libft.a という静的ライブラリとして作成され、他の C プログラムに リンクして使用できます。

ライブラリ内容

libc 関数の再実装

以下の関数は、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は関数の処理内容の確認において利用しました。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages