2013-03-02 39 views
0

您好我很新的C和與此字符指針整個事情是極其混亂給我。我正在做最簡單的事情最困難的時刻。C字符串數組的strtok()

我想用分隔符「?= &」分割一個字符串(請求),我想將不同的部分存儲在一個字符串數組中,但我似乎無法弄清楚。我覺得它是因爲我沒有完全掌握指針的概念。

繼承人我的代碼

 char buf[1024], path[1024], request[1024], **query_string, *query_pointer; 

     query_pointer = strtok(request, "?=&"); 
     strcpy(request, query_pointer); 
     while(query_pointer != NULL) { 
      strcpy(query_string, query_pointer); 
      query_string++; 
      query_pointer = strtok(NULL, "?=&"); 
     } 
+0

一個很好的C指針教程:http://pdos.csail.mit.edu/6.828/2012/readings/pointers.pdf – 2013-03-02 04:21:09

+0

不僅是一個不確定的指針('query_string'),而是一個* double *不確定的指針。誠實地說,現在可以說的最有用的事情是獲得一本好書,並且在嘗試解決雙重間接問題之前,學習* single * indirection(指向常規數據的指針)*。 – WhozCraig 2013-03-02 04:52:54

回答

0

一個非常基本的出發例子。

char **foo(char **result, char *str, const char *delim) 
{ 
    char *p=strtok(str, delim); 
    int i; 
    for(i=0; p!=NULL; p=strtok(NULL, delim) 
      result[i]=p; 
    result[i]=NULL; 
    return result; 
} 

void bar(char *str) 
{ 
    char *result[36]={NULL}; // 35 max tokens 
    int i=0; 
    result=foo(result, str, "?=&"); 
    for(i=0; result[i]!=NULL && < 35; i++) 
    { 
     printf("%s\n", result[i]);   
    } 
} 
0

我發現的最有用的技術在學習C指針是時間實際花費在紙上畫的存儲位置,並標註所有的間接性。即使到了今天,我在精神上解釋結構更復雜的結構比日常使用重新在我的腦海這些圖像。

你在任何一本書讀

沒有什麼可以比較。

0
strcpy(request, query_pointer); 

我不確定您是否真的想要將第一個令牌複製回請求,或者如果它是一個意外。

你的代碼的其餘部分似乎除了罰款:你從來沒有告訴我們如何分配內存的字符串數組(QUERY_STRING)。

記住在C,不存在這樣的東西作爲一個字符串數組。它實際上是一個字符數組的數組,因爲一個字符串只是一個字符數組。

所以,你想要做的是分配內存:

char **query_string = malloc(<max#oftokens> * sizeof(char*)); 
for (i=0; i<(max#oftokens); i++){ 
    query_string[i] = malloc(<maxlengthofeachtokens> * sizeof(char)); 
} 

還有,記得使用free()函數完成後釋放內存。 查找的malloc()和自由引用()。