2014-03-06 5 views
0

나는 내가 가지고있는 경우 제공 입력에서 예를 들어 을 하위 문자열을 추출하기 위해 노력하고있어 : 내가 얻을하려는 char * 에 "안녕하세요 내가 여기"분할 문자열 (시험에 분할 고장)

char tab[0] = "Hello"; 
char tab[1] = "I"; 
/// etc 

하지만 Segfault는 어떤 도움이됩니까? 저를 도와

int  main(int ac, char **av) 
{ 
    char **tab; 
    int i; 

    i = 0; 
    tab = str_to_wordtab("Hello I am here"); 
    while (tab[i]) 
    { 
     my_putstr(tab[i++]); 
     my_putstr("\n"); 
    } 
} 

감사 : 여기

#include <stdlib.h> 

char **str_to_wordtab(char *str) 
{ 
    int i; 
    int j; 
    int k; 
    char **tab; 

    i = 0; 
    k = 0; 
    tab = malloc(my_strlen(str) * sizeof(*tab)); 
    while (str[k] != '\0') 
    { 
     j = 0; 
     tab[i] = malloc(my_strlen(str) * sizeof(*tab[i])); 
     while (str[k] != ' ') 
     tab[i][j++] = str[k++]; 
     tab[i][j] = '\0'; 
     if (str[k] == ' ') 
     k++; 
     i++; 
    } 
return (tab); 
} 

그리고 그것을 테스트하는 주입니다 :

은 여기 내 char *를 나누는 내 기능입니다.

+1

'my_strlen'과'my_putstr'는 당신의 커스텀 함수입니까? 그 기능을 보여주세요. –

+0

그것은 루프에서'str [k] == '\ 0''을 전달합니다. and while (tab [i])'반드시 NULL로 초기화 된 것은 아닙니다. – BLUEPIXY

답변

0

내부 while 루프는 다음과 같이 표시되어야합니다.

while (str[k] != ' ') 
    { 
    tab[i][j++] = str[k++]; 

    if (str[k-1] == 0) 
    { 
     tab[++i] = 0 ; 
     return tab ; 
    } 
    } 
0

이것은 원하는 부분이 아니라 문자열의 분리입니다. 공백을 구분 기호로 사용하여 strtok을 고려하십시오. 귀하는 segfault 소개

, 여기에 몇 가지 단서가있다 : 당신이 당신의 문자열에 너무 오류

  • 게시물-incrementations가있을 수 있습니다 소스
  • \0을 다시 복사하는 잊어 버린 경우

    • while (str[k] != '\0') 위험 할 수도