strcmp는 문자열 시교시 (char *)의 문자열이 되어야 하나...
비교를 한건 (char **)문자열 집합을 비교한 점...
이 모든게 문제 입니다.
나머지 코드들은 다 못 봐서 모르겠지만...
전체적으로 한 번 꼼꼼히 살펴보시길바랍니다.
그리고 const를 너무 남발 하시는거 같은데...
Warnning메시지 넘쳐 나지 않나요?
이거 컴파일 무사히 끝나도 아마도 Warnning은 좀 많을듯 보입니다. const char *variable;
하면은 이 pointer의 주소값을 변경을 할 수가 없도록 하기 위해 사용하는 것입니다.
그런데 전체적으로 선언은 이렇게 하고 규칙은 지키시지 않은듯 합니다.
그리고 윗 분이 const에 대해 지적해 주셨는데 원 코드에서 const를 사용한 것은 아무 문제가 없어보입니다.
const char* temp;
이런식으로 선언되어 있으면 temp가 가르키는 값을 수정할 수 없는 것이지 temp를 수정할 수 없는 것이 아닙니다. 포인터 temp 자체를 const로 만들려면 아래와 같이 써야 합니다.
char* const temp;
즉.. 위에 처럼 const char** temp; 이렇게 썼다면,
temp[0] = "abc";
는 가능하지만
temp[0][0]='a';
이건 불가능하죠. 전체적으로 코드를 보면 const 변수로 가르키는 문자열을 수정하는 부분은 없기 때문에 문제는 없어 보입니다. 저는 constness는 되도록 지켜주는 편이 좋다고 생각합니다. (그런데 이런 얘기 하면 호사가가 되는건가요?;;)
그리고 지훈님께서 temp[1]="01"; 을 strcpy로 해 주는 것이 정석적인 표현이라고 하셨습니다. 네, 일단 공감은 하고요, 다만 "01"이 메모리상에 위치하는 부분을 정확히 이해하고 사용하면 위험할 건 없다고 봅니다. "01"은 메모리 구조에서 Text 영역에 위치하고 있고 Read-Only memory 입니다. 때문에 const char* 로 가르켜서 읽기 전용으로 사용하기에 적합한 메모리이죠. 또한 strcpy나 strdup에 비교하면 문자열에 필요한 메모리를 아낄 수 있다는 장점도 있습니다.
하지만 이 차이점을 정확히 이해하지 못한다면 추가적인 비용이 들더라도 strcpy, strdup을 쓰는 것이 정석적입니다. char* temp = "01"; 이런식으로 쓴 다음에 temp[0]='a'; 이렇게 할당하는 걸 막을 수가 없죠.. 당연 프로그램은 버스 에러나 세그폴로 죽게 됩니다.
[code:1]strcmp(cyrrent_id[1]
strcmp(cyrrent_id[1], comval)
아마 이거면 될 듯...<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
그리 해봤는데요..
세그멘테이션 폴트가 뜨네요..
그럼... 관련 부분 소스들도 좀 올려 주세요.위 변수 선언 부분과
그럼... 관련 부분 소스들도 좀 올려 주세요.
위 변수 선언 부분과 메모리 잡는 부분과 비교부분까지...
간단한 거라면 전체를 올려 주셔도 좋구요.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
소스입니다.
소스를 보니 일단은 start() 함수가 전체적으로 문제가 많네요.[
소스를 보니 일단은 start() 함수가 전체적으로 문제가 많네요.
*temp[1]=="01";
일다은 temp의 공간 확보도 해주시지 않으시고 assign 을 의도 했으나 이 조차 assign이 아니라 evaluation이 된 점...
strcmp는 문자열 시교시 (char *)의 문자열이 되어야 하나...
비교를 한건 (char **)문자열 집합을 비교한 점...
이 모든게 문제 입니다.
나머지 코드들은 다 못 봐서 모르겠지만...
전체적으로 한 번 꼼꼼히 살펴보시길바랍니다.
그리고 const를 너무 남발 하시는거 같은데...
Warnning메시지 넘쳐 나지 않나요?
이거 컴파일 무사히 끝나도 아마도 Warnning은 좀 많을듯 보입니다.
const char *variable;
하면은 이 pointer의 주소값을 변경을 할 수가 없도록 하기 위해 사용하는 것입니다.
그런데 전체적으로 선언은 이렇게 하고 규칙은 지키시지 않은듯 합니다.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
추가로 말씀을 드리면...temp[1]로의 "01"값 assign도
추가로 말씀을 드리면...
temp[1]로의 "01"값 assign도 바른 표현은 아닙니다.
이같은 경우 strcpy()를 이용해서 값을 복사 해주는 것이 정석적인 표현이 될듯 하군요.
그리고 위에 응급한 아래부분에서...
이넘에서 "pointer의 주소값"도 그냥 "pointer"로 변경을...
여기 호사가들 많아서 시끄러워 질 수도 있음...ㅋㅋ
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
먼저 temp를 위한 공간을 확보해 주셔야 합니다.만일 문자열을
먼저 temp를 위한 공간을 확보해 주셔야 합니다.
만일 문자열을 3개 담고 싶다면 아래와 같은 코드로 temp를 위한 공간을 확보할 수 있습니다.
그러면 아래와 같은 코드는 문제 없이 돌아갑니다.
그리고 윗 분이 const에 대해 지적해 주셨는데 원 코드에서 const를 사용한 것은 아무 문제가 없어보입니다.
이런식으로 선언되어 있으면 temp가 가르키는 값을 수정할 수 없는 것이지 temp를 수정할 수 없는 것이 아닙니다. 포인터 temp 자체를 const로 만들려면 아래와 같이 써야 합니다.
즉.. 위에 처럼 const char** temp; 이렇게 썼다면,
는 가능하지만
이건 불가능하죠. 전체적으로 코드를 보면 const 변수로 가르키는 문자열을 수정하는 부분은 없기 때문에 문제는 없어 보입니다. 저는 constness는 되도록 지켜주는 편이 좋다고 생각합니다. (그런데 이런 얘기 하면 호사가가 되는건가요?;;)
그리고 지훈님께서 temp[1]="01"; 을 strcpy로 해 주는 것이 정석적인 표현이라고 하셨습니다. 네, 일단 공감은 하고요, 다만 "01"이 메모리상에 위치하는 부분을 정확히 이해하고 사용하면 위험할 건 없다고 봅니다. "01"은 메모리 구조에서 Text 영역에 위치하고 있고 Read-Only memory 입니다. 때문에 const char* 로 가르켜서 읽기 전용으로 사용하기에 적합한 메모리이죠. 또한 strcpy나 strdup에 비교하면 문자열에 필요한 메모리를 아낄 수 있다는 장점도 있습니다.
하지만 이 차이점을 정확히 이해하지 못한다면 추가적인 비용이 들더라도 strcpy, strdup을 쓰는 것이 정석적입니다. char* temp = "01"; 이런식으로 쓴 다음에 temp[0]='a'; 이렇게 할당하는 걸 막을 수가 없죠.. 당연 프로그램은 버스 에러나 세그폴로 죽게 됩니다.
댓글 달기