C LANGUAGE TECHNOLOGY

【C言語】strcat/strncat/strcat_s関数の使い方と自作関数

悩んでいる人

C言語でstrcat/strncat/strcat_s関数の使い方と自作関数を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

strcat関数

strcat関数は,dest文字列の後にsrc文字列を追加する関数です.

その際,destの最後にある終端のヌルバイト ('\0') は上書きされ,新たに生成された文字列の末尾に終端のヌルバイトを追加します.

srcとdestのメモリ領域は重なってはいけません.(未定義の動作になります.)

destはsrcのコピーを受け取るのに十分な大きさが必要です.

strcat関数の戻り値は,destへのポインタです.

文字列をコピーするstrcpy関数の使い方を知りたいあなたはこちらからどうぞ.

C言語 strcpy関数
【C言語】strcpy/strncpy/strcpy_s関数の使い方と自作関数

こういった悩みにお答えします. こういった私から学べます. 目次1 strcpy関数1.1 strcpy関数の使い方1.2 strcpy関数の自作関数1.3 strcpy関数の注意点2 strncpy ...

続きを見る

strcat関数の使い方

strcat関数の使い方は以下になります.

実行結果は以下になります.

strcat関数の自作関数

strcat関数の自作関数は以下になります.

実行結果は以下になります.

strcat関数の注意点

strcat関数は,バッファサイズより長い文字をコピーするとバッファオーバーフローが発生することに注意して下さい.

strcat.cのコードで文字列でsrcに「abcdefghijklmnopqrstuvwxyz」,destに「abcdefghijklmnopqrstuvwxyz」を入力した結果は以下になります.

destは「abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz」 と'\0'の合計53文字になりますが,BUFSIZEは16なので,以下の6行目でバッファオーバーフローが発生して「*** stack smashing detected ***: terminated」と表示されていることがわかります.

※strcat.cでは,15行目と17行目のscanf関数と19行目のstrcat関数でバッファオーバーフローが発生しています.

strncat関数

strncat関数はstrcat関数と似ていますが,srcの最大nバイトが利用されること,srcがnバイト以上の場合,srcはヌル終端されている必要はない点が異なります.

srcがnバイト以上の場合,strncat関数はdestにn + 1バイト(srcからのnバイトと終端のヌルバイト)を書き込みます.

したがって,destのサイズは少なくともstrlen(dest) + n + 1バイト必要です.

strncat関数の使い方

strncat関数の使い方は以下になります.

実行結果は以下になります.

strncat関数の自作関数

strncat関数の自作関数は以下になります.

実行結果は以下になります.

strcat_s関数

strcat_s関数は,strSourceをstrDestinationに追加し,結果の文字列をヌルバイトで終了させます.

strSourceの最初の文字は,strDestinationの終端のヌルバイトを上書きします.

strcat_s関数の動作は,strSourceをstrDestinationの文字列が重なっている場合は未定義になります.

第2引数numberOfElementsは,残りのサイズではなく,バッファの合計サイズであることに注意してください.

strcat_s関数の戻り値は,正常に終了した場合は0,それ以外の場合はエラーになります.

strcat_s関数はVisual Studioでは利用できますが,GCC/Clangでは利用できないことに注意して下さい.

strcat_s関数の使い方

strcat_s関数の使い方は以下になります.

Visual Studioでの実行結果は以下になります.

strcat_s関数の自作関数

strcat_s関数の自作関数は以下になります.

実行結果は以下になります.同様です.

まとめ

C言語でstrcat/strncat/strcat_s関数の使い方と自作関数を紹介しました.

strcat/strncat関数はGCC/Clang/Visual Studioで利用できますが,strcat_s関数はVisual Studioしか利用できないことに注意して下さい.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

友だち追加

独学が難しいあなたは,C言語を学べるおすすめのオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , , , , , , ,