2012-12-22 1 views
0

다음 코드에 문제가 있습니다 (splitString 함수가 작동하는지 아직 모르겠지만 호출하는 동안 seg 오류가 발생 함). 코드는 다음과 같습니다C 배열 전달

#include <stdio.h> 
// 
//  Split String 
// 
int splitString(char** ret,char* instr, char* fence,int max) { 
     char* p; 
     int count=0; 
     char* sinstr; 
     char* cp; 
     int i=0; 

     while(i<max) { 
       cp=ret[i]; 
       p=fence; 
       sinstr=instr; 
       while(1) { 
         if (*p=='\0') { 
           *cp='\0'; 
           instr=sinstr; 
           break; 
         } 
         if (*p==*sinstr) { 
           p++; 
           sinstr++; 
           continue; 
         } else { 
           *cp=*instr; 
           cp++; 
           instr++; 
           break; 
         } 
       } 
       i++; 
     } 
     *cp='\0'; 
     return count; 
} 
int main (int argc, char* const argv[]) { 
     char *strs[128]; 

     char* in="test.txt"; 
     splitString(strs,in,".",2); 
     printf("fn: %s, ext: %s\n",strs[0],strs[1]); 
} 

splitString 함수 호출과의 printf 가져 오기 SEG 오류 (나는 splitString에 대한 호출을 주석 경우의 printf가 오류를 가져옵니다) 둘.

내가하려는 것은 부분 문자열을 기반으로 문자열을 분할하는 것입니다. 이 함수는 첫 번째 arg로 전달 된 배열의 하위 문자열을 함수에 반환해야합니다. 나는 믿을 수 없을만큼 명백한 것을 간과하고 있다는 것을 압니다. 그러나 C 기술은 매우 녹슬니다. 모든 지침을 이해하십시오. 물론

답변

2

, 당신은에 strs을 전달하고 있으며, 그것은 초기화되지 않고, 그 splitstring 배열이 실제 문자열을 가리키는 가정되지만, 의지 할 무엇의 (정의되지 않은 동작)

+0

를 할당해야합니다. 'strs'는 단위 화되어 있기 때문에,'ret [0]'에는 쓰레기가 포함되어 있습니다. 따라서'cp'는 쓰레기를 포함하고'* cp'는 오류를 일으킬 것입니다. –

+0

감사합니다. 나는 머리에 자신을 때렸다. 나는 그것이 명백하다는 것을 알았다. PHP를 너무 많이 사용하고 있습니다! – mlewis54

0

128 개 배열에 initliazed 귀하의 strs [128] 초기화/할당되지 않습니다.

여전히 역 참조하고 실제로 가리키는 주소에 데이터를 쓰면 아무 때나 될 수 있습니다.

함수에 대한 포인터에 대한 포인터를 전달하므로 각 부분 문자열에 맞게 함수를 동적으로 할당 할 수 있습니다. `당신은`CP = RET [I]에 도착으로

0

당신은 당신은 빨리이 충돌 (주 또는 함수) 배열,

char *strs[128];