2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

strlenのmanを少しだけ丁寧に読んでみよう!

Posted at

この記事は 42Tokyo Advent Calendar 2025 の12日目の記事です

はじめに

記事を読んでくれたみなさんこんばんは、komatsukです。

2025年10月から42Tokyoに所属しています。今までブログ等は書いたことがなかったのですが、何故か指が勝手に登録ボタンを押していたので12日目の記事を担当することになりました。そんな感じなので登録した数日後には、何で登録したんだろ?と思っていたのですが、せっかく書くなら多少なりとも勉強になることを書きたいなーと思い、今回のテーマを考えました。

タイトルの通り「少しだけ」なので、調べの甘さが多々あります。記事を読んで何か思うところがあった方は、是非ともコメントで指摘していただきたいです。また、文章自体にも変な箇所があると思いますが、そこに関しては少しで良いので目をつむっていただければと思います()

本編

manとは?

Unix/Linux系OSで、コマンド・システムコール・ライブラリ関数等の説明書を読むためのコマンド。とりあえずmanを叩けば、初見の関数やコマンドも最低限使えるようになります。

今回読むman-page

strlen(3)                                                        Library Functions Manual                                                       strlen(3)

NAME
       strlen - calculate the length of a string

LIBRARY
       Standard C library (libc, -lc)

SYNOPSIS
       #include <string.h>

       size_t strlen(const char *s);

DESCRIPTION
       The strlen() function calculates the length of the string pointed to by s, excluding the terminating null byte ('\0').

RETURN VALUE
       The strlen() function returns the number of bytes in the string pointed to by s.

ATTRIBUTES
       For an explanation of the terms used in this section, see attributes(7).
       ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
       │ Interface                                                                                                            │ Attribute     │ Value   │
       ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
       │ strlen()                                                                                                             │ Thread safety │ MT-Safe │
       └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────┴─────────┘

STANDARDS
       C11, POSIX.1-2008.

HISTORY
       POSIX.1-2001, C89, SVr4, 4.3BSD.

NOTES
       In cases where the input buffer may not contain a terminating null byte, strnlen(3) should be used instead.

SEE ALSO
       string(3), strnlen(3), wcslen(3), wcsnlen(3)

Linux man-pages 6.7                                                     2023-10-31                                                              strlen(3)

ヘッダ行

strlen(3)        Library Functions Manual        strlen(3)

左から、タイトル(セクション番号)・カテゴリ・タイトル(セクション番号)。
タイトルが2つあるのは左右対称にするためだそうです。
セクション番号はLinuxの共通規格であり、3はシステムコール関数を除く全てのライブラリ関数が含まれます。Library Functions Manual はセクション3に対応するカテゴリ名ですが、カテゴリ名は各manパッケージ毎に異なる場合があります。

NAME

NAME
       strlen - calculate the length of a string

関数名とその概要。
strlenは文字列の長さを計算します。

LIBRARY

LIBRARY
       Standard C library (libc, -lc)

関数が含まれているライブラリ名と必要なリンカオプション。
Standard C libraryとは、ISO C 規格で定められた関数群のことです。

SYNOPSIS

SYNOPSIS
       #include <string.h>

       size_t strlen(const char *s);

書式(関数の使い方)、具体的にはインクルードする必要のあるヘッダファイルと関数の型。
string.hは文字列やメモリを操作するための関数が含まれるヘッダーファイルであり、strlenは文字列を引数として受け取りsize_t型の値を返す関数です。

DESCRIPTION

DESCRIPTION
       The strlen() function calculates the length of the string pointed to by s, excluding the terminating null byte ('\0').

関数の動作について。
strlenはsが指す文字列の長さを終端文字(\0)を除いて計算します。

RETURN VALUE

RETURN VALUE
       The strlen() function returns the number of bytes in the string pointed to by s.

戻り値について。
strlenは、sが指す文字列のバイト数を返します。

ATTRIBUTES

ATTRIBUTES
       For an explanation of the terms used in this section, see attributes(7).
       ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
       │ Interface                                                                                                            │ Attribute     │ Value   │
       ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
       │ strlen()                                                                                                             │ Thread safety │ MT-Safe │
       └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────┴─────────┘

関数の様々な属性について。
Interfaceは対象関数、Attributeは属性の種類、Valueは属性の値です。strlenの場合、Attributeはスレッド安全についてで、その値はMT-Safe(Multi-Thread-Safe, 複数スレッドから安全に呼び出せる)となっています。

STANDARDS

STANDARDS
       C11, POSIX.1-2008.

関数がどの規格に準拠しているか。
strlen関数は、ISO(国際標準化機構)の2011年版と、POSIX(Unixの共通仕様を定めた標準, シェル・システムコール・一部の標準Cライブラリを扱う)の2008年版の両方に定義されています。

HISTORY

HISTORY
       POSIX.1-2001, C89, SVr4, 4.3BSD.

関数の歴史(どの規格から使用されているか)について。
strlenは、POSIX2001年版、ISO-C1989年版、Unix-SystemV4(多くのUnixの起源にもなった)、BSD(Berkeley Software Distribution, FreeBSD・MacOS等の基礎にもなった)1986年版から定義されています。

NOTES

NOTES
       In cases where the input buffer may not contain a terminating null byte, strnlen(3) should be used instead.

留意点について。
文字列にヌル文字(\0)が含まれていない可能性がある場合には、strlenの代わりにstrnlenを使用するべきです。

SEE ALSO

SEE ALSO
       string(3), strnlen(3), wcslen(3), wcsnlen(3)

関連項目。
ここでは、関連する関数が列挙されています。

ヘッダ行

Linux man-pages 6.7        2023-10-31        strlen(3)

左から、man-pageのバージョン、man-pageの最後に更新された日時、関数名(セクション番号)。

おわりに

正直、元々自由に文章を書くことには苦手意識が強く、加えて今結構忙しくて(時間的にというより精神的にですが)、一時は記事を書こうと思った過去の自分を恨んだりもしました。それでも、いつも読んでいるmanも改めて読むと意外と読み飛ばしている箇所があったんだなと気付けたり、何より、こういう場で文章を書く経験を出来たことは勉強になったなと思います。

「何か書いてくれない?」と言われた時に、「あー全然いいよ」と言って面白い記事をサラッと書けたらすごくカッコいいと個人的に思うので、そのために今後はアウトプットの数も意識していきたいです。

では、ここまで読んでくださったみなさん、またどこかで


追記:そういえば冒頭の挨拶で「こんばんは」と言ったのは、単に記事を書いているのが夜だからなのですが、「おはよう」には「ございます」が付くのに、「こんにちは」「こんばんは」には付かないこと(というより何で丁寧な表現にしにくい挨拶が広く使用されることになったか)を今ふと疑問に思いました。どなたか知っていたら教えてください。

参考文献

2
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?