간단한 도메인 출력 프로그램입니다.
이 프로그램은 제가 아이피의 C클래스 에서 netid부분의 주소를 입력하면
해당 네트워크에 속한 모든 호스트의 도메인 네임을 출력하는 프로그램입니다. 즉, 192.123.58.을 입력하면 192.123.58.1부터 192.123.58.254사이의 IP
주소를 갖는 모든 호스트의 도메인 네임을 출력하는 프로그램인데요.
제가 표시해둔곳 for문안에서의 strcpy(haddr,temp)부분이 실행이되면
세그멘테이션 오류가 나더라구요. 근데 이부분이 되야
strcat으로 붙여진 내용들이 재초기화가 되는 중요한 부분인데
왜냐면 strcat으로 붙여진 내용들은 문자열들이 계속 뒤에 붙더군요.
휴.....숙제이기도 하지만 해보고 싶은데 아직 C언어에 대한 문법적
한계는 쉽게 풀기가 어렵네요. 고수님들 도와주세요~~.
int main(int argc, char **argv) {
char *haddr, *buff, *temp;
struct hostent *myhost;
struct in_addr host_ip;
int i;
if( argc < 2 ) {
printf("사용법 : %s IP 주소(dotted decimal) \n", argv[0]);
exit(0);
}
temp = argv[1];
for( i = 1; i <= 254; i++) {
strcpy(haddr,temp); //세그멘테이션 오류가 나는곳
sprintf(buff, "%d", i);
strcat(haddr,buff);
printf("%s\n", haddr);
host_ip.s_addr = inet_addr(haddr);
printf("IP Address (hexa) 0x%x\n", host_ip.s_addr);
myhost = gethostbyaddr((char *)&(host_ip.s_addr), sizeof(host_ip.s_addr), AF_INET);
if(myhost == NULL) {
printf("Error at gethostbyaddr()\n");
exit(0);
}
printf("official host name : \t\t%s\n", myhost->h_name);
}
return 0;
}
[code:1]int main(int argc, char **ar
haddr은.. 어떤 메모리 공간을 가리키고 있는 포인터일뿐입니다..
이 포인터가 초기화조차 되지 않았기 때문에..
어디를 가리키고 있을지 알 수 없는 상태이기 때문에.. 현재
이 프로그램에 할당되지 않은 메모리를 가리키고 있을 확률이 아주 높습니다
그래서 세그멘테이션 폴트가 뜨게 된거 겠죠 ;)
char* haddr을..
char haddr[1024]; 정도로 바꿔보세요..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기