C++におけるstrcat()とstrncat()の使い方と違い
C++には、文字列を連結するための関数としてstrcat()とstrncat()があらかじめ用意されています。どちらも<cstring>ヘッダで定義されている標準的な文字列操作関数ですが、動作には重要な違いがあります。本記事では、それぞれの構文・使い方・実行例をわかりやすく解説します。
strcat()とは
strcat()は、コピー元(ソース)の文字列を、コピー先(デスティネーション)の文字列の末尾に追加するための関数です。戻り値としては、連結後のコピー先文字列へのポインタが返されます。strcat()の構文は以下の通りです。
char *strcat(char *dest, const char *src)
- dest:連結先となる文字列(結果が格納される配列)
- src:末尾に追加される元の文字列
strcat()の使用例
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[20] = "Mangoes are ";
char str2[20] = "yellow";
strcat(str1, str2);
cout << "The concatenated string is " << str1;
return 0;
}
出力結果
The concatenated string is Mangoes are yellow
このプログラムでは、まず2つの文字列str1とstr2を定義しています。続いてstrcat()を呼び出すことで、str2の内容がstr1の末尾に追加され、最後にcoutを使って連結された文字列が出力されます。該当するコード部分は以下の通りです。
char str1[20] = "Mangoes are "; char str2[20] = "yellow"; strcat(str1, str2); cout << "The concatenated string is " << str1;
strncat()とは
strncat()もstrcat()と同様に文字列を連結するための関数ですが、コピー元から追加する文字数を指定できる点が異なります。指定した文字数だけsrcの内容をdestの末尾に追加し、コピー先文字列へのポインタを返します。strncat()の構文は以下の通りです。
char *strncat(char *dest, const char *src, size_t num);
- dest:連結先となる文字列
- src:末尾に追加される元の文字列
- num:srcから追加する最大文字数
strncat()の使用例
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[20] = "Mangoes are ";
char str2[20] = "yellow";
strncat(str1, str2, 4);
cout << "The concatenated string is " << str1;
return 0;
}
出力結果
The concatenated string is Mangoes are yell
このプログラムでは、2つの文字列str1とstr2を定義した後、strncat()の第3引数に「4」を渡しています。そのため、str2の先頭から4文字分("yell")だけがstr1の末尾に追加され、連結結果がcoutによって表示されます。該当するコード部分は以下の通りです。
char str1[20] = "Mangoes are "; char str2[20] = "yellow"; strncat(str1, str2, 4); cout << "The concatenated string is " << str1;
まとめ:strcat()とstrncat()の違い
| 関数 | 特徴 |
|---|---|
| strcat() | srcの文字列全体をdestの末尾に追加する |
| strncat() | srcから指定した文字数(num)だけdestの末尾に追加する |
このように、strcat()はコピー元の文字列全体を連結するのに対し、strncat()は追加する文字数を制御できるため、より安全に文字列操作を行えます。用途に応じて適切な関数を選択しましょう。
-
C++のstrncat()関数とは?文字列連結の基本をわかりやすく解説
strncat()関数とはC++のstrncat()関数は、文字列を連結するために使用される関数です。コピー元の文字列(src)から指定した文字数だけを、コピー先の文字列(dest)の末尾に追加し、コピー先の文字列へのポインタを返します。この関数を使用するには、ヘッダーファイル<cstring>をインクルードする必要があります。strncat()の構文char * strncat ( char * dest, const char * src, size_t num );上記の構文では、コピー元の文字列srcは、最大num文字までコピー先の文字列destの末尾に追加されます。追加処
-
C++で文字列をトークン化(分割)する2つの方法を解説
文字列のトークン化(分割)とは、1つの文字列を区切り文字(スペースやカンマなど)を基準に、複数の部分文字列へ分割する処理のことです。C++では、標準ライブラリだけでもいくつかの方法で実現できます。本記事では、代表的な2つの方法をサンプルコード付きで紹介します。方法1:stringstreamを使って空白で分割する1つ目の方法は、stringstreamを使ってスペースで区切られた単語を順に読み取る方法です。この方法はやや制限がありますが、適切なチェックを加えれば十分に目的を果たすことができます。サンプルコード#include <vector> #include <string