c 언어로 2차원 문자열 배열을 함수에서 반환하는 방법

소개



c 언어를 사용하고 2차원 문자열 배열을 함수에서 main 함수로 반환하는 방법에 대한 메모를 남겨 둡니다.
※포인터 초보자이므로, 설명이 잘못되어 있으면 지적 부탁합니다.

프로그램



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void test(char**,unsigned int,unsigned int);

const unsigned int sz_fld = 50 + 1;
const unsigned int sz_ffld = 10;

int main(void) {
    char fld[sz_ffld][sz_fld];
    // 配列fldの初期化
    for (unsigned char i=0;i<sz_ffld;++i) {
        strcpy(fld[i],"");
    }

    // mallocで領域確保
    char** pfld = malloc(sz_ffld*sizeof(char*));
    for (unsigned int i=0;i<sz_ffld;++i) {
    // fld配列の先頭のアドレスをplfd(ポインタ型変数)にいれる
        *(pfld+i) = &fld[i][0];
    }

    // ポインタ型変数pfldと2次元配列のそれぞれの要素数sz_ffld,sz_fldを関数に渡す
    test(pfld,sz_ffld,sz_fld);

    // 関数から返ってきた文字列を表示させる部分
    for(int i = 0; i<3; i++){
        printf("%s\n",fld[i]);
    }

    // malloc関数で確保されたメモリを解放
    free(pfld);

    return(0);
}

void test(char** fld,unsigned int m,unsigned int n) {
    // 入力するポインタを用意 
    char a[10][8] = {"1111","2222","3333"};

    for(int i = 0; i<3; i++){
    // a[i]に格納された文字列をstrcpyをつかってポインタが指し示す番地(fld+i)にコピーするイメージ
        strcpy(*(fld+i),a[i]);
    }
    return;
}


결과



paiza.io에서 실행해 보면 아래와 같은 결과가 되었다.



참고


  • Returning a 2D char array in C
  • char ** 타입의 포인터 변수를 사용하여 malloc 함수를 2 단계 사용하여 ...
  • 좋은 웹페이지 즐겨찾기