2013-10-13 89 views
0

我正在嘗試編寫一個調用另一個函數getword()的分析函數,它將給定的字符串分解爲單詞。調用getword()會將給予getword的字符串提前到由空格分隔的下一個單詞。有沒有辦法打印字符串指針指向C中的數組?

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中字符指針指向的字符串。這是可能嗎?

我想:

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

在調用程序,但只打印出 「(空)」。

編輯

我嘗試使用下面的循環輸入字符串 「Hello World」 之後:

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

但程序返回:

( null)
(null)
(null)...「

兩個空白換行符然後是98(空)的。單詞「你好」和「世界」實際上是存儲在這兩個空白的換行符中,還是實際上沒有存儲在** p中?

+0

是的,這是可能的。寫一個循環。 –

+0

所以你有一個字符串像''foo \ nbar&baz「',你想把它變成'{」foo「,」bar「,」baz「}?試試'strtok_r()'。我不明白你爲什麼要檢查當前字符對'-1'。 – 2013-10-13 05:03:05

+0

@ n.m。我添加了一個for循環來循環和打印元素,但是當在提示符下輸入「Hello World」時,它會返回2個換行符,然後返回98(空)。 (MAXITEM = 100)是p [0] =「你好」和p [1] =「世界」還是他們都持有空白? – trawww

回答

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

我認爲當你爲你的內涵添加一些解釋時,它對OP和更多的訪問者會更有幫助。 – reporter