使用strsep()解析结构体char成员时出现指针类型不兼容警告
问题解决:strsep函数参数类型不匹配警告
警告原因
records[0].date是长度为50的char数组,取地址&records[0].date得到的是指向数组的指针(类型为char (*)[50]),但strsep函数的第一个参数要求是指向char指针的指针(类型为char **),两者类型不兼容,因此触发编译警告。
解决方案
先将数组转换为char类型指针,再取该指针的地址传入strsep。这样既满足strsep的参数类型要求,又能正常完成字符串分割。同时补充内存释放操作,避免内存泄漏。
修改后的代码如下:
#include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 typedef struct { char date[BUFDATE]; char tags[BUFDATE]; char task[BUFDATE]; char next_step[BUFDATE]; } Record; int main() { Record *records = (Record *) malloc(2*sizeof(Record)); strcpy(records[0].date, "Hello world I am a string slice function"); printf("%s\n", records[0].date); char *chunk; // 将数组转换为char指针,再取指针地址传入strsep char *date_ptr = records[0].date; while ((chunk = strsep(&date_ptr, " ")) != NULL) { printf("%s\n", chunk); } free(records); // 释放malloc分配的内存 return 0; }
补充说明
strsep函数会直接修改传入的字符串(将分隔符替换为'\0'),分割后原数组的内容会被改变,这是该函数的固有特性。- 原代码未释放
malloc分配的内存,修改后的代码补充了free(records),避免程序运行时出现内存泄漏问题。
内容的提问来源于stack exchange,提问作者ecjb
相关产品推荐
相关产品推荐

