[완료]간단한 문법 ;;;;
글쓴이: tkfkdgody / 작성시간: 금, 2008/05/23 - 7:02오후
안녕하세요..
프로그래밍하다 간단한 문법인데 자꾸 헤매네요..;;
에러가 나는 부분을 찾다가 코딩상 실수한 부분을 찾았는데;;
A(unsigned int ip, unsigned short port)라는 함수에서 인자를 두개 받아서요 { char address[20]; sprintf(address, "%s:%d", ip, port); }
위처럼 ip와 port를 합쳐서 map안의 밸류로 넣을려고 하는데 안되네요...
보다 보니 맵안의 밸류 타입과 위의 address타입이 틀린걸 발견 했는데 계속 프로그램이 sprintf에서 죽네요..
맵은 std::map 이렇게 정의하였습니다.
address를 맵안의 char* 밸류값에 넣을려고 하는데 타입을 어떻게 맞춰야 할지;;
좋은 주말 되십시오..
Forums:
소스내용과 질문이
소스내용과 질문이 매칭이 잘 안되서 예상되는 문제로 적겠습니다.
char*는 포인터이므로 보통 int를 사용하는것처럼 사용하면 십중팔구 문제가 발생합니다.
가장 대표적인 것이 복사할때 strcpy를 이용하지 않고 포인터를 그냥 대입해버려서 나중에 댕글링포인터가 되는 것이지요.
이런류의 문제라면 char*를 std::string으로 바꿈으로써 대부분 해결됩니다.
왜 char*를 쓰시나요?
이제보니 이전에도 map에 char*를 넣어서 고생하신 분이시네요.
매번 말씀드리는 건데 왜 안바꾸시는건지?
크기가 큰
크기가 큰 문자열이고 공유(sharing)가 많은 문자열을 사용하지 않는 이상은 xylosper님께서 지적해 주신 대로 std::string 을 쓰는 게 좋죠.
크기가 크고 공유가 많이 일어나는 객체의 포인터를 컨테이너 클래스에 넣는 것 자체는 아무 상관 없습니다만, 그러면 메모리 관리는 따로 알아서 해줘야 합니다.
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
네..;;
바꾸었습니다..;; 그런데 아래와 같이 문제가 생겼습니다...
이후 getAddress라는 함수에서 위의 맵안에 저장한 address값을 뽑을려고 합니다.
이상으로 들어온 값을 가지고 getAddress함수에서 주소값을 리턴 받는데요...
위처럼 getAddress함수에서 리턴되는 값을 address변수에 저장해서 사용할려고 하는데
프로그램이 printf("%s\n", (char*)&address); 프린트를 찍으면 쓰레기값이 나오네요...;;
참고로 처음에 맵안의 데이타형을 char* 형으로 주소(IP:Port)를 출력을 했을때는
출력결과 :192.168.4.
과 같이 짤려버리는 문제가 있었습니다.
답변 주셔서 감사합니다.. 맵안에 std::string형 쓰는 것!! 명심하겠습니다..
printf("%s\n",
printf("%s\n", address.c_str());
이걸로 출력해야하는군요 ;;;
감사합니다...
std::string은 char*로의
std::string은 char*로의 형변환되지 않습니다.
말씀하신대로 char*형의 문자열이 필요할때는 c_str()멤버함수를 이용하시면 됩니다.
다만 이경우는 std::cout << address << std::endl; 이라고 쓰면 좀더 C++답겠죠.
아..;;^^ 넵
아..;;^^
넵 알겠습니다.. printf문이 익숙해져버렸네요..;;
감사합니다~
아..;;^^ 넵
아..;;^^
넵 알겠습니다.. printf문이 익숙해져버렸네요..;;
감사합니다~
아..;;^^ 넵
아..;;^^
넵 알겠습니다.. printf문이 익숙해져버렸네요..;;
감사합니다~
아..;;^^ 넵
아..;;^^
넵 알겠습니다.. printf문이 익숙해져버렸네요..;;
감사합니다~
댓글 달기