주어진 문자열을 단어로 나누는 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에 저장되지 않고 있습니까?
예 가능합니다. 루프를 작성하십시오. –
그래서 "foo \ nbar & baz"와 같은 문자열을 가지고 있고 그것을'{ "foo", "bar", "baz"}'로 바꾸고 싶습니까? 'strtok_r()'을 시도하십시오. 그리고 나는 왜 당신이'-1'과 비교하여 현재의 성격을 확인하고 있는지 보지 못합니다. –
@ n.m. 루프를 추가하고 요소를 인쇄하기 위해 for 루프를 추가했지만 프롬프트에 "Hello World"를 입력하면 2 개의 줄 바꿈과 98 (null)이 반환됩니다. (MAXITEM = 100)은 p [0] = "Hello"이고 p [1] = "World"이거나 둘 다 빈 칸을 가지고 있습니까? – trawww