c·c++/c 프로그래밍

strdup 활용하기

바로이순간 2012. 6. 13. 11:34

2차원 배열에서 문자열을 보관하기 (3차원 배열로 볼수 있슴)

먼저 2차원 배열을 동적으로 할당하여 문자열의 포인터를 저장할 수 있게 준비한다.


만들어진 문자열을 strdup함수를 사용하여 2차원 배열에 넣어 준다.


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char*** makeArray(int rows, int cols) {       //이렇게 3차원 문자열을 동적할당 했습니다.

    char ***ar;

    int i, j;

    ar = (char ***)malloc(rows * sizeof(char **)); 

    for(i=0;i<rows;i++) {

        ar[i]=(char**)malloc(cols * sizeof(char *));

    }

    return ar;

}


int main(void)

{

    FILE *file9 = fopen("123.txt", "r");

    char readLine[100] = {0,};

    char *readToken = NULL;

    char c;

    char ***line9;

    int i, j, rows = 26, cols = 26;

 

    line9 = makeArray(rows, cols);

 

    for(i = 0; i < rows; i++)                //배열로 읽어들이는 부분

    {

        j = 0;

        fscanf(file9, "%s", readLine);


        readToken = strtok(readLine, ",");

        while(readToken != NULL)

        {

            line9[i][j++]=strdup(readToken);

            readToken = strtok(NULL, ",");

        }

        for(j = 0; j < cols; j++)              //한줄씩 완성될때마다 출력

            printf("%5s ", line9[i][j]);

        printf("\n");

    }

 

    for(i = 0; i < rows; i++)                //for문 빠져나와서 전체 출력

    {

        for(j = 0; j < cols; j++)

            printf("%5s ", line9[i][j]);

        printf("\n");

    }


    fclose(file9);

    return 0;

}