簡體   English   中英

C字符串數組strtok()

[英]C String Arrays strtok()

嗨,我對C非常陌生,而整個帶有char的指針對我來說非常令人困惑。 我最難做的事情很簡單。

我想用定界符“?=&”分解一個字符串(請求),並且我想將不同的片段存儲在字符串數組中,但是我似乎不知道該怎么做。 我之所以這樣,是因為我沒有完全掌握指針的概念。

這是我的代碼

        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, "?=&");
        }

一個非常基本的開始示例。

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]);        
   }
}

我發現學習C指針最有用的技術是花時間在紙上實際繪制內存位置並標記所有間接指令。 即使在今天,我仍然會在腦海中重現這些圖像,以解釋比日常使用更復雜的構造。

您讀過的任何書都無法比擬。

  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()和free()的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM