c++ 변수 맴버 초기화 질문입니다
궁수자리
//헤더파일#include iostream#include cstring#include cstdioclass command{public: char *keyword; char *mod[6]; int count; void init(char data[ ]); void init(); int modifier_count(); int valid_command(char phrase[]); void get_keyword(char s[]); void get_modifier(char s[], int pos);};---------------------------------------------------------------------------------------#include command.husing namespace std; void command::init(char data[ ]) { int x=0; char *temp; //GET A KEYWORD FROM THE DATA temp = strtok(data,;); for(int y = 0; y strlen(temp); y++) { temp[y] 91 ? temp[y] += 32 : temp[y]=temp[y]; } keyword = temp; //EXTRACT MODIFIERS FROM DATA AND SAVE THEM INTO ARRAYS while ((temp=strtok(NULL,;))!=NULL) { for(int y = 0; y strlen(temp); y++) { temp[y] 91 ? temp[y] += 32 : temp[y]=temp[y]; } mod[x] = temp; x++; } //FILL THE LAST ARRAY WITH NULL mod[x] = NULL; } void command::init() { char *_keyword = new char[8]; &nbs; //INITIALIZE THE VARIABLES strncpy(_keyword,go,3); strcpy(keyword,_keyword); strcpy(mod[0],north); strcpy(mod[1],south); strcpy(mod[2],east); strcpy(mod[3],west); strcpy(mod[4],start); delete [] _keyword; } int command::modifier_count() { count = 0; for(int x = 0; x 5; x++) { if(mod[x] != NULL) { count++; } else { x=5; } } return count; } int command::valid_command(char phrase[]) { char *temp; char *word; int keyval =0; int modval =0; //EXTRACT THE FIRST WORD FROM THE PHRASE temp = strtok(phrase, /n/t?!,); for(int y = 0; y strlen(temp); y++) { temp[y] 91 ? temp[y] += 32 : temp[y]=temp[y]; } //CHECK IF THE FIRST WORD FROM THE PHRASE IS MATCHED TO KEYWORD OR MODIFIERS. if(!strcmp(keyword,temp)){ keyval = 1; //LOOP UNTIL THE END OF WORDS IN PHRASE while(temp != NULL){ //EXTRACT THE REST OF WORDS FROM THE PHRASE temp = strtok(NULL, /n/t?!,); for(int y = 0; y strlen(temp); y++) { temp[y] 91 ? temp[y] += 32 : temp[y]=temp[y]; } for(int x=0; x count; x++) { //CHECK IF THE WORD IS MATCHED TO THE MODIFIERS //AND IF THERE IS A VALID KEYWORD BEFORE VALID MODIFIER if((strcmp(mod[x],temp) == 0) && (keyval == 1)){ modval = x + 1; //if a MOD is found, end the loop. x = 5; } } } } else{ //LOOP UNTIL THE END OF WORDS IN PHRASE while(temp != NULL){ //EXTRACT THE REST OF WORDS FROM THE PHRASE temp = strtok(NULL, /n/t?!,); for(int y = 0; y strlen(temp); y++) { temp[y] 91 ? temp[y] += 32 : temp[y]=temp[y]; } //CHECK IF THE WORD IS MATCHED TO THE KEYWORD if(!strcmp(keyword,temp)){ keyval = 1; //FOR LOOP SEARCHING FOR A MODIFIER for(int x=0; x count; x++) { //CHECK IF THE WORD IS MATCHED TO THE MODIFIERS //AND IF THERE IS A VALID KEYWORD BEFORE VALID MODIFIER if(strcmp(mod[x],temp) == 0 && keyval == 1){ modval = x + 1; //if found a MOD, end the loop x = 5; } } } } } //RETURN 6, IF THE SUBTOTAL IS EXCEEDED 6. return keyval + modval 6 ? 6 : keyval + modval; } void command::get_keyword(char s[]) { s = strcat(keyword,s); } void command::get_modifier(char s[], int pos) { mod[pos-1] != NULL ? s = strcat(mod[pos-1],s) : s = strcat(mod[pos-1],); }
요색부분은 지금 이상태로 돌리면 segmentation fault가 뜨는 곳이구요.요색부분은 다른 곳에서 답변 주신 분들 중에 변수를char mod[5][40]랑 keyword[40]으로 바꾸라고 하셔서 바꾸면 컴파일 에러가 뜨는 곳입니다.아오 미추어버리겠네요 ㅜㅜ
-
아잉형님
포인터는 메모리 할당이 선행되어야 합니다.
위 코드상에는 포인터에 대한 메모리 할당이 없는 것 같네요. (현재 취중이라 못 본걸지도 ㅡㅡ)
메모리 할당은 alloc 함수 또는 new 연산자를 사용해야 합니다. -
들꿈
포인터와 포인터 상수에 대해서 공부를 하셔야겠네요.
이 개념들에 대해서 모르는 것 같습니다.
이 개념들을 모르는 상태에서
코드를 수정해줘봐야 왜 그런지를 이해 못 할 것 같네요. (오히려 제가 설명하기에는 많이 부족한 것일지도...)
전 바쁜 관계로 자세한 설명은 다른분께 pass~!
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |