はじめに
どうも! みなため(@MinatameT)です。
今回はC言語のstrncpy関数についての解説です。これは、char配列(文字列)に文字列をコピーするものです。
例えば、「あいうえおー」に「えいえい」をコピーして、「えいえいおー」にするようなイメージです。この場合は、「あいうえ」が「えいえい」に上書きされています。
それでは、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文字には、その後の文字をすべて削除する役割がありますので、「ーメン!」が削除されています。
……これで、文字列のコピーは大丈夫だと思います。
今回はここまでです。少し難しいところもありましたが、皆さん、お疲れ様でした。