2011-05-01 4 views
1

strtok을 사용하여 문자열을 분할했습니다. strtok 및 strcpy 오류

[업데이트]

나는 귀하의 의견을 사용하고 아래의 새 버전에 대한 대답하지만, printf("tmp[idx] ...가 제대로 인쇄

int Crawl :: splitUrl(char ***tmp, int max_length, char *url) 
{ 
int idx=0; 
char * p; 
int i; 

p = strtok (url,"/"); 
while (p != NULL && idx < max_length) 
    { 

    for (i=0;i<maxUrlSize-1 && p[i] != '\0';i++) 
    (*tmp)[idx][i] = p[i]; 
    for (; i< maxUrlSize-1;i++) 
    (*tmp)[idx][i] = '\0'; 

    printf("tmp[idx[%d]] %s\n",idx,(*tmp)[idx]); 

    idx++; 
    p = strtok (NULL, "/"); 
    } 

return idx; 
}; 

기압 작동하지 않았다. split_url가 비어

split_url = new char * [ maxUrlSplits ]; 
    for (int k=0;k<maxUrlSplits;k++) 
    split_url[k] = new char [maxUrlSize]; 

    arr_size = crawl->splitUrl(&split_url,maxUrlSplits,url); 

배열 :

하지만 내 주에

나는 방법을 실행 한 후.

컴파일러와 gdb가 정상입니다.

누군가 아이디어가 있습니까?

+0

어떻게 배열이 비어 있다는 것을 알고 계십니까? 아무 문제없이 실행할 수 있습니다. split_url 배열이 비어 있지 않습니다. –

+0

약간의 OT이지만 이것은 분명히 C++이기 때문에 왜 처음부터 배열을 사용합니까? – manneorama

+0

[UPDATE] 또는 [SOLVED]와 같은 상태 업데이트를 질문 제목에 넣지 마십시오. 질문의 명확한 요약만으로도 충분합니다. 걱정하지 마십시오. 질문을 업데이트하면 누구나 볼 수 있습니다. – razlebe

답변

-1

네, 맞습니다. C의 모든 매개 변수는 값으로 호출하여 작동하지만 수정이 필요한 경우 (배열 채우기) 포인터를 사용해야합니다. 루프

 int Crawl :: splitUrl(char ***tmp, int max_length, char *url) 
     { 
     int idx=0; 
     char * p; 
     int i; 

     p = strtok (url,"/"); 
     while (p != NULL) 
      { 

      for (i=0;i<maxUrlSize || p[i] != '\0';i++) 
      (*tmp)[idx][i] = p[i]; 
      for (; i< maxUrlSize-1;i++) 
      (*tmp)[idx][i] = '\0'; 

      printf("tmp[idx] %s\n",(*tmp)[idx]); 

      idx++; 
      p = strtok (NULL, "/"); 
      } 


     return idx; 
     }; 

... 
     arr_size = crawl->splitUrl(&split_url,maxUrlSplits,url); 
+0

그런 역 참조 포인터가 문제를 요구하고 있습니다. – ColWhi

+0

dereferencing 포인터는 엄격하게 ANSI C와 호환되며 예제에서는 NULL과 같이 작동하지만 – user411313

0
for (i=0;i<maxUrlSize || p[i] != '\0';i++) 
    tmp[idx][i] = p[i]; 

이 이 올바르지 않을 수 있습니다. 조건이 true 인 바이트를 오랫동안 복사합니다. 이 사실 일 때만 복사해야한다고 생각합니다.

1

포인터가 가리키는 곳을 변경하지 않는 것을 보면 char *를 함수에 전달하기 만하면됩니다. 따라서

int Crawl :: splitUrl(char *tmp, int max_length, char *url) 
관련 문제