메인함수 작성시 argv에 대해서질문입니다...^^
글쓴이: 오네테르 / 작성시간: 토, 2005/10/29 - 10:03오전
#include <stdio.h> #include <string.h> main(int argc, char **argv) { char *foundString; char *outputString = ""; size_t outputStringSize; foundString = strtok(argv[1], "|"); while(1) { if(strcmp(foundString, argv[2]) == 0) { foundString = strtok(NULL, "|"); continue; } strcat(outputString, foundString); foundString = strtok(NULL, "|"); if(foundString == NULL) break; else strcat(outputString, "|"); } outputStringSize = strlen(outputString); if( outputString[outputStringSize-1] == '|') { outputString[outputStringSize-1] = '\0'; } printf("%s", outputString); }
이 프로그램은 main에서 2개의 argument를 입력받습니다.
하나는 "|"를 구분자로 하는 전체스트링이고
다른하나는 삭제하고싶은 스트링으로
전체 스트링에서 해당스트링을 삭제한 결과를
화면에 출력해 줍니다.
Quote:
$>rmstring "a|b|c|d|e" c
$>a|b|d|e
문제는 전체스트링이 a|b|c|d|e|f|g|h|j
까지는 이상이 없지만 그 이상으로 넘어가면
a|b|c|d|e|f|g|h|j|l|m....
이 되면 앞부분이 잘려서 출력되더군요
Quote:
$>rmstring "a|b|c|d|e|f|g|h|i|j|K|L|m|o|p|q" c
$>m|n|o|p|q
같이 말이죠..
짐작에는 아마 argument 사이즈가 정해져 있어서
그런것 같지만...정확한 원인은 잘 모르겠네요...
도움좀 부탁드립니다...^^
Forums:
Re: 메인함수 작성시 argv에 대해서질문입니다...^^
메모리 미할당으로 인한 버그로 추정됩니다.
이럴경우 segment fault를 유발할 소지가 많습니다.
감사합니다..
아하...
malloc으로 메모리 잡아주고
outputString=""
이부분 삭제해주니
제대로 나오는군요...
답변 감사합니다..^^
Want 2 be A good Programmer
while loop의 내용이 좀 복잡해 보입니다. 가독성이 좋도록 고쳐봅
while loop의 내용이 좀 복잡해 보입니다. 가독성이 좋도록 고쳐봅니다.
댓글 달기