c 언어로 2차원 문자열 배열을 함수에서 반환하는 방법
7042 단어 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에서 실행해 보면 아래와 같은 결과가 되었다.
참고
#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에서 실행해 보면 아래와 같은 결과가 되었다.
참고
Reference
이 문제에 관하여(c 언어로 2차원 문자열 배열을 함수에서 반환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/minwinmin/items/acfd066c97928f3155a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)