Skip to content

Commit 0d0c489

Browse files
committed
fix(cstdlib/mblen): 諸々の修正
* std::mblen の内部状態をクリアせずに使用しているのを修正 * size_t に対する std::size_t のつけ忘れを修正 * nullptr を指定した時の戻り値の記述を修正 * 関連するロカールカテゴリを明記
1 parent 0b61755 commit 0d0c489

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

reference/cstdlib/mblen.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ namespace std {
1414
1515
先頭以外の文字に関するバイト数は計算されない。
1616
17-
この関数は現在のロケールに依存してマルチバイト文字を解釈する
17+
この関数は現在のロケールカテゴリー `LC_CTYPE` に依存してマルチバイト文字を解釈する
1818
1919
`n`は解析に使用する最大バイト数を指定する。
2020
2121
## 戻り値
2222
- 正常に動作する場合、文字の占めるバイト数を返す。
23-
- `str`が`nullptr`の時、内部状態を初期化し`0`を返す。
23+
- `str`が`nullptr`の時、内部状態を初期化する。現在のエンコーディングが状態を持つ場合は非ゼロの値を返し、それ以外の場合は`0`を返す。
2424
- 無効な文字列、または`n`が不足している場合、`-1`を返す。
2525
2626
## 例
@@ -51,8 +51,11 @@ int main() {
5151
#include <clocale>
5252

5353
int count_chars_mblen(const char* s) {
54+
// std::mblen 内部の std::mbstate_t を初期化する必要あり
55+
std::mblen(nullptr, 0);
56+
5457
int count = 0;
55-
size_t i = 0;
58+
std::size_t i = 0;
5659
while (s[i] != '\0') {
5760
int len = std::mblen(&s[i], MB_CUR_MAX);
5861
if (len < 0) {

0 commit comments

Comments
 (0)