strtok 를 사용한 함수에 대해서 질문입니다.

peac7의 이미지

typedef struct _SHELL{
char *str[20];
int data[20];
}SHELL;

SHELL newshell[MAX_S]; //20개의 셀 생성 가능
int S_page = 0; // 현재 shell 페이지의 번호, 외부에서도 참조가능
int nOrder = 0; // 변수 개수

void comp(char *input) // 변수 입력시 변수 명과 데이타를 쉘 구조체에 저장해주는 함수.
{
int i;
extern int S_page;
extern int nOrder;
char *p1;


while(1)
{
p1 = strtok(input, " ");
if(strcmp(p1, "=") == 0)
{
strcpy(newshell[S_page].str[nOrder], p1);
newshell[S_page].data[nOrder] = atoi(strtok(NULL, " "));
return ;
}

}
}

제가 만든 함수인데 제가 구조체의 개념을 잘 이해 못하고 있는거 같습니다.
내용은 a = 1 을 입력시 a를 구조체의 str에 1은 구조체의 data에 넣어주도록 하는 것입니다.
뭐가 잘못되었는지 모르겠습니다. 좀 알려주세요 ㅠ.ㅠ

bacon의 이미지

strtok의 사용법을 잘 모르시는듯 한데요.

에러처리 무시하고 다음을 가정한다면

main ()
{
char buf[]="a=1";
comp(buf);
}

comp는 대충

p1 = strtok(input, "=");
newshell[S_page].str[nOrder] = strdup(p1);
newshell[S_page].data[nOrder] = atoi(p1+strlen(p1)+1);

이 정도 여야 하지 않을까 합니다. while(1) {} 도 제거.

strdup한부분은 SHELL의 정의가 char* str[20]로 되어 있어서 그렇게 한겁니다. 나중에 free 해주셔야겠죠.
원하는게 char str[20]이었다면 두번째라인은

strcpy (newshell[S_page].str, p1);

정도라야 하지 않을까 합니다.