2011-09-18 4 views
0

현재 연결된 목록과 포인터에 문제가 있습니다. 문제는 연결된 목록에 데이터를 추가하는 것입니다. 현재 내가 가지고 내가 할 노력하고있어연결된 목록/포인터 문제

struct str_pair{ 
char ip [50] ; 
char uri [50] ; 
struct str_pair *next ; 
}; 

struct str_pair *it ; 

struct str_pair *header = NULL; // Start of linked list 
struct str_pair *ptr; // Moves along the list 
struct str_pair *ptr2; // Another pointer 
struct str_pair *ptr3; 

void addData(char *addURI, char *addIP){ 

    struct str_pair *tmp, *tmp2; 

    tmp = (str_pair*)malloc(sizeof(str_pair)); // Create new space in str_pair 
    strncpy(tmp->uri, addURI, 49); 
    strncpy(tmp->ip, addIP, 49); 
    tmp->next = NULL; 

    if (header == NULL) { header = tmp; } 
    else 
    { 
     tmp2 = header; 
     while (tmp2->next != NULL) { tmp2 = tmp2->next; } 
     tmp2->next = tmp; 
    } 
} 

는 링크 된 목록에 그 값을 추가해야하는 매개 변수를 통해 URL 및 IP 주소를 전달할 수 있습니다. 여기

이 함수를 호출하는 코드입니다 :

int main(int argc, char *argv[]) 
{ 
    int incrItems=0; 
    int j; 

    header = NULL; 

    for(j = 1; j < argc; j++) 
    { 
     char ch=argv[j][0]; 

     switch(ch) 
     { 
     case 'A' : 
      { 
       char *newURI = argv[j+1]; 
       char *newIP = argv[j+2]; 
       incrItems++; 
       addData(newURI,newIP); 
       j=j+2; 
       break; 
      } 

*Snipped the rest as its unnecessary* 

난 데 문제는 전달 된 인수가 링크 된 목록에 추가되지 않는 것입니다. 컴파일 할 때 오류가 표시되지 않습니다.

+0

정확히 어떤 문제가 있습니까? – Mat

+0

실제로 문제를 언급하는 것을 잊었습니다! –

+0

문제는 작동하지 않는다는 것입니다. 전달 된 인수의 데이터가 연결된 목록에 표시되지 않습니다. 코드를 컴파일 할 때 오류가 표시되지 않습니다. – George

답변

0
for(j = 1; j < argc; j++) 
    { 
    switch(argv[j][0]) { /* no need to copy */ 
    case 'A' : 
      incrItems++; 
      /* assert (j+2 < argc); */ 
      addData(argv[j+1], argv[j+2]); /* no need to copy */ 
      j=j+2; 
      break; 
    case 'B' : 
    default: 
     ... 
      break; 
     } 
    } 

EDIT : 참고 : 위의 용액 단지 암시하지 이다. 또 다른 힌트 :

#include <stdlib.h> 
#include <string.h> 

void addData(char *addURI, char *addIP){ 

    struct str_pair *tmp, **hnd; 

    tmp = malloc(sizeof *tmp); 
    /* assert (tmp != NULL); */ 
    strncpy(tmp->uri, addURI, 49); tmp->uri[49] = 0; 
    strncpy(tmp->ip, addIP, 49); tmp->ip[49] = 0; 
    tmp->next = NULL; 

    for (hnd = &header; *hnd; hnd = &(*hnd)->next) {;} 
    *hnd = tmp; 
} 
+0

이제 선생님은 George가 밝은 아이라고 생각할 것입니다. -} – wildplasser

+0

Hahaha는 너무 밝지 않습니다. 내가 늦어서 내가 "힌트"를 처리하기 위해 시간을 들여야합니다. 귀하의 도움은 감사하겠습니다 : D. – George

0

당신은 왜 당신이 J 변수를 증가하는의 내부에 있다면? 게다가, 인자가 올바른지 알아 내기 위해서 print 함수를 add 함수에 넣으십시오.

0

멋진 제안은 wildplasser에서 제공하지만 코드는 완벽하게 작동합니다.

int main(int argc, char *argv[]) 
{ 
    int incrItems=0; 
    int j; 

    header = NULL; 

    for(j = 1; j < argc; j++) 
    { 
     char ch=argv[j][0]; 

     switch(ch) 
     { 
     case 'A' : 
      { 
       char *newURI = argv[j+1]; 
       char *newIP = argv[j+2]; 
       incrItems++; 
       printf(" Adding %s %s\n", newURI, newIP); 
       addData(newURI,newIP); 
       j=j+2; 
       break; 
      } 
     } 
    } 
printf(" J at end is %d\n",j); 

it = header; 
if(it != NULL) 
do { 
     printf(" %s %s\n",it->ip, it->uri); 
     it = it->next; 
}while(it != NULL); 

    } 
관련 문제