0

こんにちは、私は C に非常に慣れていません。文字を使用したこのポインター全体が非常に混乱しています。私は非常に単純なことをするのに最も苦労しています。

文字列 (リクエスト) を区切り文字 "?=&" で分割したいのですが、さまざまな部分を文字列の配列に格納したいのですが、方法がわかりません。ポインタの概念を完全に理解していないからだと思います。

私のコードはこちら

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

3 に答える 3

0
  strcpy(request, query_pointer);

最初のトークンをここでリクエストにコピーして戻すのか、それとも事故だったのかはわかりません。

コードの残りの部分は、文字列の配列(query_string)にメモリをどのように割り当てたかを示すことはありません。

Cでは、文字列の配列などはありません。文字列は単なるcharの配列であるため、実際にはcharの配列の配列です。

したがって、実行したいのは、次の方法でメモリを割り当てることです。

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()の参照を検索します。

于 2013-03-04T21:06:08.780 に答える
0

C ポインターを学習する上で最も役立つ手法は、実際に紙にメモリ位置を描画し、すべての間接参照にラベルを付けるのに費やす時間であることがわかりました。今日でも、日常の使用よりも複雑な構造を解釈する際に、頭の中でこれらのイメージを精神的に再現しています。

どんな本を読んでも、比較することはできません。

于 2013-03-02T05:04:04.237 に答える
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]);        
   }
}
于 2013-03-02T04:16:31.663 に答える