char *dup = strdup(str.c_str()); char *token = strtok(dup, " "); while (token != NULL) { v.push_back(string(token)); token = strtok(NULL, " "); } free(dup);
时间: 2024-04-02 17:34:21 浏览: 143
这段代码是将一个string类型的str按照空格分割成多个子串,并将这些子串存入一个vector<string>类型的变量v中。具体实现方式是先将str转换为char*类型的指针dup,然后使用strtok函数将dup按照空格分割成多个子串,每个子串使用string类型的构造函数转换为string类型的变量,并将其存入v中。最后使用free函数释放dup指针的内存空间。这段代码需要注意的是dup指针需要手动释放内存空间,否则会造成内存泄漏。
相关问题
select group_concat(b.reason_id) as reason_id from fgz_plyj.case_fix_attrs a inner join fgz_plyj.fgz_reason b on a.case_id=b.case_id inner join fgz_plyj.court_url c on a.case_id=c.case_id inner join fgz_plyj.case_optlog e on a.case_id=e.case_id where c.is_dup='N'and DATE_FORMAT(c.create_time, '%Y')<DATE_FORMAT(NOW(), '%Y')+1 and b.result_type='发回重审' and a.trial_round ='二审' 在查询这个数据是,fgz_reason表有重复字段导致结果重复,如何去重
您可以在查询中使用DISTINCT关键字来去除重复的结果。您可以将GROUP_CONCAT函数应用在DISTINCT修饰的字段上,以确保去重后的结果。
以下是修改后的查询语句:
```sql
SELECT GROUP_CONCAT(DISTINCT b.reason_id) AS reason_id
FROM fgz_plyj.case_fix_attrs a
INNER JOIN fgz_plyj.fgz_reason b ON a.case_id = b.case_id
INNER JOIN fgz_plyj.court_url c ON a.case_id = c.case_id
INNER JOIN fgz_plyj.case_optlog e ON a.case_id = e.case_id
WHERE c.is_dup = 'N' AND DATE_FORMAT(c.create_time, '%Y') < DATE_FORMAT(NOW(), '%Y') + 1 AND b.result_type = '发回重审' AND a.trial_round = '二审'
```
这样修改后的查询语句将确保在执行GROUP_CONCAT函数之前,结果集中的重复reason_id被去除。
int DNS_query_create(struct DNS_Query *query,const char *hostname,const char *type){ if(query==NULL||hostname==NULL){ printf("query or hostname wrong.\n"); return -1; } memset(query, 0x00, sizeof(struct DNS_Query)); query->name=malloc(sizeof(hostname)+2); query->length=strlen(hostname)+2; char *ptr=query->name; int offset = 0; const char s[2]="."; char *hostname_dup= strdup(hostname); char *token=strtok(hostname_dup,s); while(token!=NULL){ size_t len=strlen(token); *(ptr+offset)=len; offset++; strncpy(ptr+offset,token,len+1); offset+=len; token=strtok(NULL,s); } free(hostname_dup); if(strcmp(type,"A")==0){ query->qtype= htons(TYPE_A); }else if(strcmp(type,"CNAME")==0){ query->qtype=htons(TYPE_CNAME); }else if(strcmp(type,"MX")==0){ query->qtype=htons(TYPE_MX); }else if(strcmp(type,"PTR")==0){ query->qtype=htons(TYPE_PTR); }else{ printf("No such type!!!\n"); exit(-1); } query->qclass= htons(0x0001); return offset; }
这段代码是一个函数,函数名为“DNS_query_create”,它接收三个参数,一个指向“DNS_Query”结构体的指针“query”,一个指向字符串的指针“hostname”,一个指向字符串的指针“type”。该函数的作用是根据传入的主机名和查询类型,初始化“query”指向的结构体,设置一些DNS协议查询的字段值,如name、length、qtype和qclass。如果传入的指针为NULL,则打印“query or hostname wrong.”的错误信息,并返回-1。该函数使用了C语言中的“memset”函数、“malloc”函数、“strdup”函数、“strtok”函数、“strlen”函数和“strcmp”函数。
阅读全文