C言語なら俺に聞け 163 (987レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
938: デフォルトの名無しさん (ワッチョイ 467f-OkwB) [] 2025/07/17(木) 08:01:19.44 ID:9jYPg0KZ0(1/3) AAS
>>859
859(2): デフォルトの名無しさん (オイコラミネオ MM6b-fGW2) [sage] 2025/07/01(火) 02:30:13.65 ID:LkiphQyhM(1) AAS
PHPの文字列は、1つの文字列の中でも、文字によってバイト数が異なるそうだ。
だから、$str[$k] の $k は、文字単位ではなくバイト単位。
文字単位で指定したい場合には、
mb_substr($str, $k, 1, "UTF-8")
とするとのこと。
文字列の終端には一応 0x00 が入っているが、文字の長さはバイト数で管理されており、0を
終端とはみなしていない。だから、文字コードが 0x00 の文字も文字列の中に含めることが可能。
$str = "こんにちは";
echo strlen($str); // バイト数(UTF-8なら15)
echo mb_strlen($str); // 文字数(5文字)

ところが、正規表現を扱う場合には、0x00 のバイトが含まれていると、文字列の終端と
みなされることがある。だから、ユーザーによって入力された文字列を正規表現で
安全チェックをしたつもりでも、文字列の途中に 0x00 のバイトが含まれていて、
それ以後に危険なコードをが含まれている倍がある。

C言語で作っていれば子の様な齟齬は起きない。
PHPじゃなくてUTF-8やSJISを使っているならみんな同じだぞw
939: デフォルトの名無しさん (ワッチョイ 467f-OkwB) [] 2025/07/17(木) 08:03:30.58 ID:9jYPg0KZ0(2/3) AAS
C言語そのもこは文字、文字列はキャラクタセットの概念がないから、常に1バイト単位で判断して組み立てる。
940: デフォルトの名無しさん (ワッチョイ 467f-OkwB) [] 2025/07/17(木) 08:04:01.09 ID:9jYPg0KZ0(3/3) AAS
>>931
931(1): デフォルトの名無しさん (ワッチョイ 625f-Booz) [sage] 2025/07/15(火) 00:15:52.37 ID:o1+ac6ll0(1) AAS
C言語で 普段使いに便利な文字列操作ライブラリってある?
文字列をどんどん連結したりとか削ったりとか
こんなところで聞くなよ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.039s