字符串分段处理

yel617 2010-08-16 06:05:05
在做一个嵌入式web服务器,现在要实现读取html发过来的信息,name1=value1&name2=nalue2&name2=nalue2&name3=nalue3&name4=nalue4&name5=nalue5&name6=nalue6&name7=nalue7&name8=nalue8
现在定义了2个数组,分别存放name和value
char *argName[8];
char *argValue[8];
c = getchar()
可以怎么将c分割,分别存放在这2个数组里啊?
...全文
153 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yel617 2010-08-23
  • 打赏
  • 举报
回复
html url解码程序
#include <stdio.h>
#include <string.h>

char hexToChar(char *argv)
{
char digit;
digit = (argv[0] >= 'A' ? ((argv[0]&0xdf) - 'A') + 10:(argv[0] - '0'));
digit *= 16;
digit += (argv[1] >= 'A' ? ((argv[1]&0xdf)-'A') +10 :(argv[1] - '0'));
return digit;
}

void unEscapeUrl(char *url)
{
register int i,j;
for(i = 0,j = 0; *(url+j);++i,++j){
if((*(url + i) = *(url + j)) == '%'){
*(url + i) = hexToChar(url + j + 1);
j += 2;
}
}
*(url + i) = '\0';
}

int main( )
{
char url[20];
printf("Please enter a url string\n");
scanf("%s",url);
unEscapeUrl(url);
printf("%s\n",url);
return 0;
}
千羽鸣 2010-08-19
  • 打赏
  • 举报
回复
因为strtok()函数限制众多,诸如:
内部使用一个static char*保存下一个起始位置,由于使用了static,不能递归使用和用于线程程序
所以建议使用strtok_r(),用法和strtok一样,但是需要提前声明一个char 指针来报存这个位置
char *saveptr;
第一次使用:
strtok_r(目标串,分割字符,&saveptr);
此后
strtok_r(NULL,分隔字符,&saveptr)
如果strtok不符合楼主的要求的话可以考虑使用strtok_r
yel617 2010-08-19
  • 打赏
  • 举报
回复
brookmill厉害啊
louyong0571 2010-08-17
  • 打赏
  • 举报
回复
brookmill厉害啊,佩服
brookmill 2010-08-16
  • 打赏
  • 举报
回复
用c=getchar()
int main()
{
char *p;
char *argName[8];
char *argValue[8];
int i;
int c;

for (i=0; i<8; i++)
{
argName[i] = malloc(64);
argValue[i]= malloc(64);
}

i=0;
p=argName[0];
while (i<8)
{
c=getchar();
if (c=='=')
{
*p = '\0';
p = argValue[i];
}
else if (c=='&')
{
*p = '\0';
p = argName[++i];
}
else
*p++ = c;
}

for (i=0; i<8; i++)
{
printf("%d: %s, %s\n", i, argName[i], argValue[i]);
}
for (i=0; i<8; i++)
{
free(argName[i]);
free(argValue[i]);
}
return 0;
}
brookmill 2010-08-16
  • 打赏
  • 举报
回复
另一个版本,不用strtok的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *html = "name1=value1&name2=nalue2&name2=nalue2&name3=nalue3&name4=nalue4&name5=nalue5&name6=nalue6&name7=nalue7&name8=nalue8";
char *p=html;
char *argName[8];
char *argValue[8];
int i, j;

for (i=0; i<8; i++)
{
argName[i] = malloc(64);
argValue[i]= malloc(64);
}

for (i=0; i<8; i++)
{
for (j=0; j<64 && *p && *p!='='; j++, p++)
argName[i][j] = *p;
p++;
for (j=0; j<64 && *p && *p!='&'; j++, p++)
argValue[i][j] = *p;
p++;
}

for (i=0; i<8; i++)
{
printf("%d: %s, %s\n", i, argName[i], argValue[i]);
}
for (i=0; i<8; i++)
{
free(argName[i]);
free(argValue[i]);
}
return 0;
}
brookmill 2010-08-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *html = "name1=value1&name2=nalue2&name2=nalue2&name3=nalue3&name4=nalue4&name5=nalue5&name6=nalue6&name7=nalue7&name8=nalue8";
char str[512];
char *argName[8];
char *argValue[8];
char *delim = "&=";
char *tok;
int i;

for (i=0; i<8; i++)
{
argName[i] = malloc(64);
argValue[i]= malloc(64);
}

strcpy(str, html);
tok = strtok(str, delim);
for (i=0; i<8 && tok!=NULL; i++)
{
strcpy(argName[i], tok);
tok = strtok(NULL, delim);
if (tok == NULL)
break;
strcpy(argValue[i], tok);
tok = strtok(NULL, delim);
}

for (i=0; i<8; i++)
{
printf("%d: %s, %s\n", i, argName[i], argValue[i]);
}
for (i=0; i<8; i++)
{
free(argName[i]);
free(argValue[i]);
}
return 0;
}

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧