【C言語】文字列操作 「文字列のコピー」
プログラミング初心者、学生
・C言語ではめんどくさい文字列の操作
・よく使う文字列のコピーの仕方が知りたい
そんな方の疑問に答えます。
コードが知りたい方は目次のソースコードへ飛んでください!
本記事のテーマ
【完全初心者向け】文字列のコピーが分かる!
<stdlib.h>のstrcpyでもコピーは出来ますが今回は自分たちで文字列をコピーする関数を作成します!
文字列のコピー
アルゴリズム
文字列のコピー
1. コピー元、コピー先の配列を宣言
2. 配列のアドレスを関数に渡し、関数内ではポインタで扱う
3. コピー元の値がNULL文字になるまでコピーを続ける
また、
・コピー先の配列はとコピー元より大きくなくてはならない
・文字列の最後には終端文字としてNULL文字が入っている
以上のアルゴリズムを元にC言語プログラミングを組んでいきます!
文字列コピー、実装!
コピー方法は、
1. while(*src_p != NULL)
←src_pの終端文字がNULLになるまで実行
2. *dist_p = *src_p
←アドレス内の値をコピー
3. dist_p++; src_p++;
←コピー元、コピー先のアドレス移動
文字列操作コード
文字列にはアドレス一つにつき一文字が格納されており、終端にはNULL文字が入っています。ですので、アドレスを一つずつ進め、中の値をコピーしていきます・
ポインタの扱い方:
*src_p: *をつけるとポインタの中の値を操作できる
src_p++: ポインタのアドレスを一つ進める
while(*src_p != NULL){
*dist_p = *src_p;
dist_p++;
src_p++;
count++;
}
出力
コピー前:
コピー後: Hello World!
完成です!
文字列のコピーは色んなとこで使用すると思います、ぜひ試してみてください!
main文を含む全ソースコードは以下に示します。
ソースコード
#include <stdio.h>
void enshu0606(void);
unsigned char mystrcpy(char* dist_p, char* src_p);
int main() {
enshu0606();
return 0;
}
unsigned char mystrcpy(char* dist_p, char* src_p){
unsigned char count = 0;
while(*src_p != NULL){
*dist_p = *src_p;
dist_p++;
src_p++;
count++;
}
return count;
}
void enshu0606(){
char src[200] = {"Hello World!"};
char dist[200];
printf("コピー前: %s\n", dist);
mystrcpy(dist, src);
printf("コピー後: %s\n", dist);
}