기초적인 C문법에 관한 질문입니다.
글쓴이: Jdimension / 작성시간: 일, 2004/10/10 - 5:59오후
fork랑 execv를 쓰려고 사전작업을 하는 내용인데요,
fork랑 execv자체는 쉽게 해결했는데 기초적인 C 부분에서 막히네요;
먼저 execv에 넘겨 줄 다음과 같은 구조체를 만들었습니다.
struct command_t { char name[BUFSIZE]; char *argv[256]; } command;
그리고 이 아래 부분은 사용자에게 입력 받은 문자열을 잘라서 위의 구조체의 argv에 넣어 주는 내용입니다.
void argumentParsing(char input[]) { int index=0, tempindex=0, argvindex=0; char temp[BUFSIZE]; cout << "input : " << input << endl; while(input[index] != '\0') { if(input[index] != ' ') { temp[tempindex++] = input[index++]; } else if(input[index] == ' ') { command.argv[argvindex] = temp; argvindex++; tempindex=0; index++; // temp초기화 } } command.argv[argvindex] = temp; argvindex++; tempindex=0; index++; // temp초기화 command.argv[argvindex] = (char *)0; }
그런데 이걸 다 돌리고 command.argv를 확인해보면
command.argv[0]부터 끝까지 전부 마지막 배열에 들어갔어야 할 문자로 채워져있네요.
예를 들어 저 함수에 "ls -a -l"이란 걸 넘겨줬을 경우
command.argv[0]에는 ls
[1] -a
[2] -l
이렇게 들어가야 하는데 [0] [1] [2] 전부 -l이 들어가 있는데요..
아무리 쳐다봐도 문제를 모르겠네요. 중간중간에 cout << argvindex 도 해 봤는데 argvindex에는 문제가 없던데... 뭐가 문제인지...
몇시간째 낑낑대고 있습니다. 이제 슬슬 화가나네요 T_T
Forums:
다음의 코드는 command.argv[argvindex] 가 포인터라서,
다음의 코드는 command.argv[argvindex] 가 포인터라서, 문자열이 복사 되는게 아니라 temp의 주소가 들어 갑니다.
를 다음과 같이 문자열을 저장할 공간을 할당 받고, 문자열 복사 함수를 이용해야 복사가 됩니다.
한번 command.argv[argvindex]가 가진 값을 확인해 보면 temp의 주소가 들어 있는 것을 확인하실수 있습니다.
p.s. 제가 제데로 설명했는지 모르겠네요.
앗... 잘 되는군요. 감사합니다. 아직도 포인터 개념이 가물가물해서요;
앗... 잘 되는군요. 감사합니다. 아직도 포인터 개념이 가물가물해서요;;; 부끄럽습니다. 흐흐
댓글 달기