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

一个非常基本的起始示例。

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

于 2013-03-04T21:06:08.780 回答
0

我发现学习 C 指针最有用的技术是花时间在纸上实际绘制内存位置,并标记所有间接。即使在今天,我也会在脑海中重新创建这些图像,以解释比日常使用更复杂的结构。

你在任何书中读到的任何东西都无法与之相比。

于 2013-03-02T05:04:04.237 回答