42Tokyo 本科week 2 - hshinaga libft part1まとめ
はじめに
本科の2週目が終わりました。1週目は環境整備と新生活の準備に追われましたが、2週目はいよいよ本格的なプログラミング学習が始まりました。とはいえ、なかなか安定しない生活リズムとの格闘の日々。私の場合、もともと12時間睡眠が当たり前の体質、想像以上に生活リズムとの戦いでした。
この記事では、私の日常生活と42の第一関門であるlibftのpart1をまとめました。
D8 (10/28 月) - 生活リズム改善の兆し ⏰
本日のタイムライン
生活リズムについて 💭
改善の兆し
スマホアラームのおかげで午後1時半起床
理想的なサイクルに少しずつ近づいている
睡眠の課題
自然だと12時間睡眠してしまう体質
ショートスリーパーが本当に羨ましい...
💡 Tips:アラーム活用が重要
42Tokyo活動
課題進捗
libft関数を5個完成!
先週の5個と合わせて着実に前進
関数の理解が深まってきた実感
Github活動開始! 🎯
今日から本格的にGithub活用を始めることに。
Githubの重要性
エンジニアの実績を示す「履歴書」
就活・転職時の強力なアピールツール
42の課題も良いポートフォリオに
Tips:レポジトリ連携方法
git remote add [name] [githubrepo]
👉 このコマンドで簡単に連携可能
ぜひ皆さんもgithubを積極に使いましょう!
D9 (10/29 火) - libft Part1総まとめ 📚
libft Part1の体系的理解
各関数の役割とポイントを整理
libft part1のまとめを書いていきたいと思います、自分用なので読みにくかったらごめんなさい
コード自体はgithubに上がっています
https://github.com/hikaripipi/libft
文字判定関数
ft_isalpha.c // アルファベットかどうか
'A'と'Z'もしくは'a'と'z'の間だったらreturn
ft_isdigit.c // 数字かどうか
'0'と'9'の間だったらreturn
ft_isalnum.c // アルファベットまたは数字かどうか
上の2つを合わせる
ft_isascii.c // ASCIIコードの範囲内か
0と127の間だったらreturn ASCIIを直にしていしているのでちょんちょん不要
ft_isprint.c // 印刷可能な文字か
32と126の間だったらreturn それ以外はプリントできない見えない文字
文字列操作関数
ft_strlen.c // 文字列の長さを返す
返り値はsize_tは符号なし整数型、カウント用変数i、 '\0'文字列の終端に到達するまでループ,i++; ループ終わったらiの値を返す。
ft_strchr.c // 文字列から文字を検索(前方から)
文字列(第一引数)の中から指定された文字(第二引数:intで受け取ってcharにキャスト)を探して、見つかった場所のポインタを返す。見つからなかった場合はNULLを返すが、指定文字が'\0'の場合は文字列終端のポインタを返す。
ft_strrchr.c // 文字列から文字を検索(後方から)
後ろから探して、最後に見つかった場所のポインタを返す。見つからなかった場合はNULLを返すが、指定文字が'\0'の場合は文字列終端のポインタを返す。
ft_strncmp.c // 文字列を比較(n文字まで)
第一引数と第二引数の文字列を、第三引数で指定された文字数まで比較する。
返り値は比較結果を示す整数値:
- 0:両方の文字列が等しい
- 正の値:第一引数の方が大きい
- 負の値:第二引数の方が大きい
めも
1. 比較は unsigned char として行う(負の値を避けるため)
2. ヌル文字で終了('\0'以降は比較しない)
3. 指定文字数が0の場合は即座に0を返す
4. len-1まで比較して、違いが見つからなければ最後の文字を比較
5. 文字列の長さが指定文字数より短い場合はヌル文字まで
ft_strnstr.c // 文字列から部分文字列を検索
big文字列からlittleを探す、
4つの条件、big[i+j]が\0かどうか、littleが\0かどうか、一致するかどうか、lenの範囲内かどうか。
全部一致したらreturn ((char *)&big[i]); bigのi番目の開始位置のアドレスを返す
ft_strlcpy.c // 文字列をコピー
ft_strlen(src)取得して、1文字ずつコピー行ったら最後に'\0'をおいて、return (src_len);
ft_strlcat.c // 文字列を連結
既存文字列の後ろに新しい文字列をくっつける。サイズチェックをして入る分だけコピー、残り分は切り捨て。'\0'は必ずつける
size超えないよう確認しながらdst_lenを数えて、コピー。本来必要だった長さ(dst_len + src_len)を返す
メモリ操作関数
ft_memset.c // メモリに特定の値を設定
char: -128 ~ 127
unsigned char: 0 ~ 255
メモリの1マス = 1バイト = unsigned charのサイズ
void型のポインタをunsigned charにキャストして、指定バイト数分だけループしながら1バイトずつ値を書き込む。
最後に最初のポインタ(第一引数)をそのまま返す。メモリを1バイトずつ確実に埋めるためunsigned charを使用。
ft_bzero.c // メモリを0で埋める
おなじ仕組みで1バイトずつ0を書き込む。
返り値なし(void)。メモリ初期化によく使用。
ft_memcpy.c // メモリ領域をコピー
srcとdestが両方NULLの場合はNULLを返す。1バイトずつコピーしていく。
メモリ領域が重なる(オーバーラップする)場合の動作は保証されない。
ft_memmove.c // メモリ領域を重複を考慮してコピー
d = (unsigned char *)dest;
s = (const unsigned char *)src;
d > s: メモリが重なっていて、destがsrcより後ろ
この場合、後ろからコピー
そうでない場合は前からコピー
ft_memchr.c // メモリ領域から文字を検索
第一引数の領域から第二引数のバイト値を第三引数のサイズ分だけ探索し、見つかった位置のポインタを返す。見つからない場合はNULLを返す。
型を変換する際にはconstがあるものは引き継ぐ メモリ関連(1バイトずつ)はunsigned charをつかう
ft_memcmp.c // メモリ領域を比較
異なるバイトが見つかった時点でその差(source1 - source2)を返す
n バイトまで全て同じ内容だった場合は0を返す
文字変換関数
ft_toupper.c // 小文字を大文字に変換
'a'と'z'の間だったら
ASCII +32
ft_tolower.c // 大文字を小文字に変換
A'と'Z'の間だった
ASCII -32
文字列変換関数
ft_atoi.c // 文字列を整数に変換
空白文字(\t\n\r\v\f)をスキップし、符号(+/-)を1つだけ処理、
その後数字文字列を整数値に変換(オーバーフローチェックしながら数字の分だけloop)。
返り値はint型で、ft_check_overflow関数でINT_MAXとINT_MINの範囲チェック(超えたら-1か0を返す)。
メモリ確保関数
ft_calloc.c // メモリを確保して0で初期化
メモリ確保と0初期化を行う関数。第一引数(要素数)と第二引数(各要素のサイズ)を掛けて必要なメモリサイズを計算。
メモリサイズのオーバーフローチェック(要素数×サイズが最大値を超えないか)と、0サイズリクエストの処理(最小1バイト確保)を行う。
mallocでメモリを確保し、ft_bzeroで0埋めを行い、確保したメモリのポインタを返す(確保失敗時はNULL)。
ft_strdup.c // 文字列の複製を作成
午後の予定
午後3:45の歯医者予約では、削られていた歯の一部がキラキラしたセラミックになって、なんだか嬉しい気分に。
その後、強い雨の中センタービーフで遅めのランチを食べました。
通し営業はありがたい!!
D10 (10/30 水) - 生活改善への決断 💪
今日も予定通りに起きることができませんでした。このままではいけないと思い、思い切ってメルカリで任天堂の新商品「アラーモ」を購入することに。
予定変更
本日予定していた42English、アレルギーがひどくて参加を断念することに。もっと予定通りに物事を進められるようになりたいなぁ。みんなはどうやって予定通りに実行しているんでしょうか...
ゆっくりやすむこと
AI会参加
毎週水曜19時からの定例会に参加。来週は私も何か発表することになっています。
発表準備開始
少し緊張するけど良い機会
夜の活動タイムライン
18:30 作業開始
19:45 ft_communication(2件)
21:00 英会話1時間
合計3時間のコミュニケーション、充実した一日になりそうです!
D11 (10/31 木) - ハロウィンの予定変更🎃
ハロウィン断念... 👻
家を出るタイミングを逃す
買った鳥頭が無駄に(しくしく)
残念ポイント 😢
家を出る時に薬を昨日のズボンポケットから移し忘れてしまい、Garciniaを飲み始めてから初めての飲み忘れ。少し落ち込みましたが、1食くらいなら大丈夫、と自分に言い聞かせています。
D12 (11/1 金) - アラーモ到着の日 🎮
深夜の仕事
ユーザー向けニュースレター配信の準備:
Posthog連携可能なサービスを探索中
複数社とMTG実施
結果:また朝方就寝に...
アラーモ初見レビュー ⭐
新しいおもちゃにわくわくしながら開封!
UI/UXの完成度が素晴らしい
ゼルダのテーマを設定
音質の良さに感動
スピーカーとしての可能性も
Mood改造は様子見
D13 (11/2 土) - 生活リズム改善の一歩 ⏰
ついに起床成功!
アラーモ効果で予定時間に起床達成。夜勤で普段は昼間起きる必要がないのに、いつも起きられない私が人生(寿命)を得したような感覚です!
その他イベント
CG社友達とマダミス予定(11/10)
D14 (11/3 日) - マダミスと深夜グルメ 🎮
マダミス
10時間プレイ!最近の週末の定番になりつつあり、すっかり楽しみに。
深夜ラーメン発見 🍜
歌舞伎町の三田製麺所が大当たり!
特徴:
- 大盛り無料
- 深夜3時まで営業
- 麺屋武蔵より好み
42生に強くおすすめしたい一店。こういう美味しい発見があると、深夜の学習も頑張れそうです。
2週間を振り返って
技術面での成長 💻
libft課題:パート2まで完成、あとはテストして提出します
GitHubでのコード管理開始
生活面での変化 🌙
アラーモ導入による起床改善
メラトニンとの併用効果
ダイエット初めて1ヶ月で3キロ痩せました!!!!!
来週への抱負 🎯
libftの完了を目指す
AI会での発表準備
プログラミングの学習、生活リズムの改善、どちらも一朝一夕にはいきませんが、小さな成功体験を積み重ねながら、一歩一歩前に進んでいきたいと思います。42Tokyo生の皆さん、一緒に頑張りましょう!
次回は、より充実した報告ができるよう、頑張ります!