MENU

【C言語】文字列を別の変数にコピーする方法を解説

この記事では、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’)を追加しています。

1 2
目次から探す