쉘 구현중에 질문입니다..
글쓴이: svsummon / 작성시간: 수, 2009/11/18 - 1:19오후
안녕하세요 이번에 공부를 하면서 쉘 구현을 공부하고 있는 학생입니다..
지금 쉘구현을 하면서 일단 입력 값으로 들어온 문장을 파싱하는 부분인데요..
알고리즘은 그 문장에서 연산자들의 수를 세고 그 연산자의 수 +1 만큼을 2차원 동적배열로 잡으려고 합니다.
만약 as > qwe | zxcv
이런 식으로 입력 값이 들어오면
commandp[0] = "as"
commandp[1] = "qwe"
commandp[2] = "zxcv"
이런 식으로 넣으려고 합니다
이렇게 하려면 입력 값에 따라 각 동적 배열이 서로 다른 크기를 가져야만 합니다.
그리고 연산자는 따로 oper 라는 1차원 동적 배열을 만들어서 각각 개인의 식별 값을 가지게 하는 코드입니다.
----
여기서 문제는 commandp 를 채우는 과정인데요
일단 for 문이 돌기전에 2차배열의 틀은 만들고
for 문 안에서 그 2차배열 안의 각 배열에 서로 다른 크기의 배열을 동적 배열 시킵니다.
(말이 되게 어렵네요 =_=;;)
지금 이런 식으로 했더니
거의 마지막 에 있는
-----
for(j=0; j < oper_count; j++)
*(*(commandp+j)) = 45;
-----
이부분에서 에러가 나더군요;;
지금 제가 하는 것에서 뭐가 문제인지 정확히 모르겟습니다;;
도움 부탁드립니다 ㅠㅠ
#include "mysh.h" void fill_comp() { int oper_count = 0; int j, k; int l = 0; // commandp 를 위한 식별자 int tmp = 0; // 연산자의 위치를 갱신 for(j=0; command[j] != '\0';j++) // malloc 을 해주기 위해 연산자의 개수를 센다 { if(command[j] == '|' || command[j] == '>') oper_count++; if(command[j] == '<') { oper_count++; if(command[j+1] == '<') oper_count--; } } oper = malloc(oper_count); // 연산자의 개수만큼 동적 할당 commandp = (char**)malloc(sizeof(char*) * (oper_count+1)); for(j=0, k=0; command[j] != '\0'; j++) // 동적 할당한 oper 에 적절한 식별값을 채움 // 1:< 2:<< 3:| 4:> // 동시에 commandp 의 동적 할당을 함 { if(command[j] == '<') { oper[k] = 1; commandp[l] = (char*)malloc(sizeof(char) * (j-tmp)); printf("< : j = %d, tmp = %d\n", j, tmp); l++; tmp = j+1; if(command[j+1] == '<') { oper[k] = 2; tmp = j+2; } k++; } else if(command[j] == '|') { commandp[l] = (char*)malloc(sizeof(char) * (j-tmp)); printf("| : j = %d, tmp = %d\n", j, tmp); l++; tmp = j+1; oper[k] = 3; k++; } else if(command[j] == '>') { commandp[l] = (char*)malloc(sizeof(char) * (j-tmp)); printf("> : j = %d, tmp = %d\n", j, tmp); l++; tmp = j+1; oper[k] = 4; k++; } } //for(k=0; k < oper_count;k++) // printf("oper[%d] : %d\n", k, oper[k]); //commandp[0][0] = 'a'; for(j=0; j < oper_count; j++) *(*(commandp+j)) = 45; // printf("sizeof commandp : %d\n", sizeof(commandp)); // printf("oper_count : %d\n", oper_count); for(j=0; j < oper_count+5; j++) printf("sizeof commandp[%d] : %s\n", j, commandp[j]); }
Forums:
답변 부탁드립니다
혹시 말이 어렵거나 해서 이해가 힘드시면 댓글달아주세요;; 최대한 다시 풀어서 말씀드릴게요 ㅠㅠ
댓글 달기