2013-03-02 70 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()和自由引用()。