C言語で動的に配列サイズを確保する方法


方法1: malloc関数を使用する方法

#include <stdio.h>
#include <stdlib.h>
int main() {
    int size;
    printf("配列のサイズを入力してください: ");
    scanf("%d", &size);
    int* array = (int*)malloc(size * sizeof(int));
    if (array == NULL) {
        printf("メモリの割り当てに失敗しました。\n");
        return 1;
    }
// 配列の使用
    for (int i = 0; i < size; i++) {
        array[i] = i + 1;
    }
// 配列の表示
    printf("配列の要素: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
// メモリの解放
    free(array);
    return 0;
}

方法2: calloc関数を使用する方法

#include <stdio.h>
#include <stdlib.h>
int main() {
    int size;
    printf("配列のサイズを入力してください: ");
    scanf("%d", &size);
    int* array = (int*)calloc(size, sizeof(int));
    if (array == NULL) {
        printf("メモリの割り当てに失敗しました。\n");
        return 1;
    }
// 配列の使用
    for (int i = 0; i < size; i++) {
        array[i] = i + 1;
    }
// 配列の表示
    printf("配列の要素: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
// メモリの解放
    free(array);
    return 0;
}

方法3: realloc関数を使用する方法

#include <stdio.h>
#include <stdlib.h>
int main() {
    int size;
    printf("配列の初期サイズを入力してください: ");
    scanf("%d", &size);
    int* array = (int*)malloc(size * sizeof(int));
    if (array == NULL) {
        printf("メモリの割り当てに失敗しました。\n");
        return 1;
    }
// 配列の使用
    for (int i = 0; i < size; i++) {
        array[i] = i + 1;
    }
// 配列の表示
    printf("初期配列の要素: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    int newSize;
    printf("\n新しい配列のサイズを入力してください: ");
    scanf("%d", &newSize);
    int* newArray = (int*)realloc(array, newSize * sizeof(int));
    if (newArray == NULL) {
        printf("メモリの再割り当てに失敗しました。\n");
        free(array);
        return 1;
    }
// 新しい配列の使用
    for (int i = size; i < newSize; i++) {
        newArray[i] = i + 1;
    }
// 新しい配列の表示
    printf("新しい配列の要素: ");
    for (int i = 0; i < newSize; i++) {
        printf("%d ", newArray[i]);
    }
// メモリの解放
    free(newArray);
    return 0;
}

これらの方法を使用することで、C言語で動的に配列のサイズを確保することができます。各方法にはそれぞれ異なる利点と制約がありますので、使用する前に状況に合わせて適切な方法を選択してください。