【C言語】strncpy関数で文字を上書きする方法

文字サイズ 

はじめに

どうも! 高杉 皆為(@MinatameT)です。

今回はC言語のstrncpy関数についての解説です。これは、char配列(文字列)に文字列をコピーするものです。

例えば、「あいうえおー」に「えいえい」をコピーして、「えいえいおー」にするようなイメージです。この場合は、「あいうえ」が「えいえい」に上書きされています。

それでは、strncpy関数の使い方と文法を確認していきます。

strncpy関数の文法

strncpy関数の文法!
文法
  • #include<string.h>を忘れずにしておきます。
  • strncpy(ABC,XYZ,n); ※ABCはコピー先のchar配列名、XYZはコピー元のchar配列名、nはXYZの半角何文字分をコピーするか……です。

文法だけを見てもあまりイメージできないと思いますので、実際の使用例(ソースコードと実行結果)を確認していきます。

strncpy関数の使用例1

ソースコード

#include<stdio.h>
#include<string.h>

int main(void)
{
  char word[64] = "starry";
  char note[64] = {0}; //何も書いていない状態

  strncpy(note,word,6); //noteにwordの半角6文字分をコピーする。

  printf("noteの文字列=%s\n",note); //文字列の表示は「%s」。

  return(0);
}

配列wordには「starry」という文字列が入っています。これを、配列noteにコピーする処理をしています。

整数の表示には%dと記述しましたが、文字列の表示には%sと記述してください。

なお、それぞれのchar配列に64バイトも使っているのは気にしないでください。特に意味はありません。

それでは、実行結果を確認していきます。

実行結果

noteの文字列=starry

コピーした結果が、正しく表示されていることがわかります!

それでは、次の例を見ていきましょう。

strncpy関数の使用例2

ソースコード

#include<stdio.h>
#include<string.h>

int main(void)
{
  char word[64] = "牛丼だ!";
  char note[64] = "今日の夜食はカップラーメン!";

  strncpy(note+12,word,9); //noteの半角12文字めにwordの半角9文字分をコピーする。
	
  printf("noteの文字列=%s\n",note);

  return(0);
}

今回は「日本語(全角文字)」であることに気をつけてください。全角1文字は半角2文字です。

配列noteには、「今日の夜食はカップラーメン!」がもともと入ってあります。そこに、「牛丼だ!」をコピーします。「牛丼だ!」は全角4文字 = 半角8文字ですね。

ここで、「なぜ半角9文字分もコピーするの? 全角4文字なら、半角8文字でちょうどだよね?」と思う方もいらっしゃると思います。

しかし、この余分に見える半角1文字には、実は「その後の文字をすべて削除する」という役割があります。

また、note+12というのは、配列noteの半角12文字めから……という意味です。

これらのことをまとめて図示すると、次のようになります。

置換前

配列noteの半角12文字めから……

置換後

配列wordをコピーしています。

それでは、実行結果を確認していきます。

実行結果

noteの文字列=今日の夜食は牛丼だ!

「カップラーメン!」が「牛丼だ!」に置き換わっています。

先程も説明したとおり、この余分に見える半角1文字には、その後の文字をすべて削除する役割がありますので、「ーメン!」が削除されています。

……これで、文字列のコピーは大丈夫だと思います。

今回はここまでです。少し難しいところもありましたが、皆さん、お疲れ様でした。


 

みなためじゃんけん

このコーナーは、私と擬似的にじゃんけんできるコーナーです。

みなためじゃんけん、じゃんけんぽん!

私が出したのは……





チョキでした! グーの勝利です!



この記事をSNSでシェアする

プログラミングカテゴリーの最新記事(5件)

最新記事(10件)

管理人のTwitter

内部リンク集