2013-10-13 2 views
0

주어진 문자열을 단어로 나누는 getword()라는 또 다른 함수를 호출하는 구문 분석 함수를 작성하려고합니다. getword()를 호출하면 getword에 지정된 문자열이 공백으로 구분 된 다음 단어로 이동합니다.C에서 char 포인터의 배열을 가리키는 문자열을 출력하는 방법이 있습니까?

void parse(char *s, char **p) { 
    int i = 0; 
    while(*s != -1 && *s != '&' && *s != '\n' && *s != ';' && *s != '\0') { 
     p[i] = s; 
     i++; 
     getword(s); 
    } 

} 

호출 프로그램을 실행 한 후 배열 p를 가리키는 char 포인터가 가리키는 문자열을 인쇄하고 싶습니다. 가능한가요? 호출 프로그램에

printf("%s\n", (**p)); 

을하지만, 그것은 단지 "(널)"출력합니다 :

나는 시도했다.

편집은 (

"

:

for(i=0; i< MAXITEM; i++) 
    printf("%s\n", p[i]); 

그러나 프로그램 반환 :

나는에 문자열"Hello World "를 입력 한 후 다음 루프를 사용하려고 시도 null)
(null)
(null) ... "

빈 줄 바꿈이 두 개 있으면 98 (null)입니다. "Hello"와 "World"라는 단어가 빈 줄 바꿈에 실제로 저장되어 있습니까? 아니면 실제로 ** p에 저장되지 않고 있습니까?

+0

예 가능합니다. 루프를 작성하십시오. –

+0

그래서 "foo \ nbar & baz"와 같은 문자열을 가지고 있고 그것을'{ "foo", "bar", "baz"}'로 바꾸고 싶습니까? 'strtok_r()'을 시도하십시오. 그리고 나는 왜 당신이'-1'과 비교하여 현재의 성격을 확인하고 있는지 보지 못합니다. –

+0

@ n.m. 루프를 추가하고 요소를 인쇄하기 위해 for 루프를 추가했지만 프롬프트에 "Hello World"를 입력하면 2 개의 줄 바꿈과 98 (null)이 반환됩니다. (MAXITEM = 100)은 p [0] = "Hello"이고 p [1] = "World"이거나 둘 다 빈 칸을 가지고 있습니까? – trawww

답변

0
#define getword(s) while (*s && *s != ' ') ++s; while (*s == ' ') *s++ = '\0' 
+0

나는 당신이 당신의 의도에 설명을 추가 할 때 그것이 OP와 다른 방문자들에게 더 도움이 될 것이라고 생각합니다. – reporter

관련 문제