main() { char *data; int len; int ret; int i=0; int flag=0; int digit=0; char **str; do { printf("input length of string\n"); scanf("%d",&len); }while(len<=0); getchar(); /*分配字符串空间*/ ret = dynamic_create(&data,(len+1)*sizeof(char)); if(ret!=OK) { printf("分配空间失败\n"); return ER; } /*输入字符串*/ ret = input_str(data,len); if(ER==ret) { printf("赋值失败\n"); return ER; } printf("string=%s\n",data); /*计算数字串的个数*/ ret = num_count(data,&digit); if(ER==ret) { return ER; } printf("digit=%d\n",digit); /*开辟一个指针数组*/ ret = dynamic_create((void**)&str,digit*sizeof(char*)); if(ER==ret) { return ER; } printf("digit=%d\n",digit); printf("开辟指针数组成功\n"); str_trans(data,str);//将字符串中的数字串转置存储 for(i=0;i<digit;i++) { printf("str%d=%s\n",i,*(str+i)); } }
DWORD WINAPI http_do_request(void *lPtr) { socket_conn* conn = (socket_conn*)lPtr; if(conn == 0) return 0; printf("[%08x]new connection\n", GetCurrentThreadId()); while(1) { int keepalive = 0; dynamic_object * req = dynamic_create(); if(http_read_request(conn, req) == 0) { dynamic_delete(req); break; } char* path = dynamic_get_string(dynamic_map_find(req, "PATH")); char* method = dynamic_get_string(dynamic_map_find(req, "METHOD")); char* connection = dynamic_get_string(dynamic_map_find(req, HTTP_HEADER_CONNECTION)); if(connection && strcmp(connection, "keep-alive")==0) keepalive = 1; printf("[%08x]%s %s\n", GetCurrentThreadId(), method, path); if(strcmp(path, "/hello") == 0) { char* html = "<html><body>Hello World!</body></html>"; int htmllen = strlen(html); dynamic_object * res = dynamic_create(); dynamic_string_printf(dynamic_map_insert(res, HTTP_HEADER_CONTENT_LENGTH), "%d", htmllen); dynamic_set_string(dynamic_map_insert(res, HTTP_HEADER_CONTENT_TYPE), "text/html"); http_send_response(conn, 200, res); write_socket(conn, html, htmllen, -1); dynamic_delete(res); }else { http_send_file(conn, req); } dynamic_delete(req); if(keepalive == 0) break; } close_socket(conn); printf("[%08x]close connection\n", GetCurrentThreadId()); return 0; }
int InitStack(pSqStack s) { int ret; ret = dynamic_create((void**)&(s->base),STACK_SIZE*sizeof(Elem)); if(ER==ret) { printf("create stack err\n"); return ER; } s->top = 0; s->stacksize = STACK_SIZE; return OK; }
/*init every data*/ int init_elem(pData *elem) { int i; dynamic_create((void**)elem,SIZE*sizeof(Data)); for(i=0;i<SIZE;i++) { (*elem)[i].num = EMPTY; (*elem)[i].par = EMPTY; (*elem)[i].lchild = EMPTY; (*elem)[i].rchild = EMPTY; } }
/*为每一个字符串分配空间*/ int str_trans(char *data,char **str) { int num=0; int i=0,j=0,k=0; int ret; while(*(data+i)!='\0') { if(*(data+i)>='0'&&*(data+i)<='9') { num++; } else if(num!=0) { ret = dynamic_create((void **)(str+j),num*sizeof(char)); j++; if(ER==ret) { return ER; } i--; for(k=0;k<num;k++) //逆序赋值 { *(*(str+j-1)+k) = *(data+i); i--; } i=i+num; //恢复i num = 0; } else { num=0; } i++; } return OK; }