「C++/標準テンプレートライブラリ」の版間の差分
削除された内容 追加された内容
Semi-Brace (トーク | 投稿記録) M 内容の調整 |
→文字列: <cstring> でなけ <string.h> をインクルードしているので strlen() に std:: は不要。 s/char型のポインタ/NULL文字で終端されたchar型の配列/ タグ: 2017年版ソースエディター |
||
4 行
== 文字列 ==
CではNULL文字で終端されたchar型の
以下の例を見てください。
27 行
</syntaxhighlight>
C++では、C形式の文字列の代わりに{{code|std::string}} (以下、単に{{code|string}})
{{code|string}}
例2: 例1と同じ動作をするコード
65 行
void func(const char* s1)
{
char s2[256]; //<--s1の文字列サイズチェックがないとs2にコピーあるいは追加する時にバッファオーバー
strcpy(s2, s1); /* 文字列のコピー */
71 行
strcat(s2, s1); /* 文字列の追加 */
printf("%s\n", s2);
printf("%zu\n",
}
85 行
例3では{{code|func()}}は{{code|main()}}からしか呼ばれません。
しかし、{{code|func()}}に渡された文字列の長さをチェックしないと、s2に対して範囲外へのアクセスを行う可能性があるため危険です<ref group="注">257文字以上の文字列を{{code|func()}}に渡すと[[W:バ
これに対してC++バージョンを関数分割すると、次のようになります。
例4: 例2を関数に分割したバージョン
116 ⟶ 115行目:
</syntaxhighlight>
{{code|string}}
== 注釈 ==
|