この記事では、C言語で文字列を別の変数にコピーする方法とコピー時の注意点について解説します。
文字列のコピー方法
文字列を別の変数にコピーする方法にはいくつかの方法があります。
以下では、代表的な方法を解説します。
strcpy関数を使ったコピー方法
strcpy関数
は、C言語の標準ライブラリ関数の一つで、文字列をコピーするために使用されます。
以下は、strcpy関数
を使ったコピーの例です。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[20];
strcpy(str2, str1);
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
上記のコードでは、str1という文字列をstr2にコピーしています。
strcpy関数
は、第一引数にコピー先の文字列のポインタ、第二引数にコピー元の文字列のポインタを指定します。
コピー元の文字列は、終端文字(‘\0’)までコピーされます。
strncpy関数を使ったコピー方法
strncpy関数
は、strcpy関数
と同様に文字列をコピーするために使用されますが、コピーする文字数を指定することができます。
以下は、strncpy関数
を使ったコピーの例です。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[20];
strncpy(str2, str1, sizeof(str2) - 1);
str2[sizeof(str2) - 1] = '\0';
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
上記のコードでは、strncpy関数
を使ってstr1をstr2にコピーしています。
第一引数にコピー先の文字列のポインタ、第二引数にコピー元の文字列のポインタ、第三引数にコピーする文字数を指定します。
sizeof演算子
を使ってコピー先の文字列のサイズから1を引いた値を指定し、最後に終端文字(‘\0’)を追加しています。
memcpy関数を使ったコピー方法
memcpy関数
は、メモリ領域をコピーするために使用されますが、文字列をコピーする場合にも利用することができます。
以下は、memcpy関数
を使ったコピーの例です。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[20];
memcpy(str2, str1, sizeof(str1));
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
上記のコードでは、memcpy関数
を使ってstr1をstr2にコピーしています。
第一引数にコピー先のメモリ領域のポインタ、第二引数にコピー元のメモリ領域のポインタ、第三引数にコピーするバイト数を指定します。
sizeof演算子
を使ってコピー元の文字列のサイズを指定しています。
ループを使ったコピー方法
ループを使って文字列をコピーする方法もあります。
以下は、ループを使ったコピーの例です。
#include <stdio.h>
int main() {
char str1[] = "Hello, World!";
char str2[20];
int i;
for (i = 0; str1[i] != '\0'; i++) {
str2[i] = str1[i];
}
str2[i] = '\0';
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
上記のコードでは、forループを使ってstr1をstr2にコピーしています。
ループの条件として、コピー元の文字列の終端文字(‘\0’)に達するまでループを繰り返し、文字を一つずつコピーしています。
最後に終端文字(‘\0’)を追加しています。