首页 > 代码库 > 关于使用strtok的一个小问题
关于使用strtok的一个小问题
今天在弄一下啊小小程序的时候,报错,出现了问题,先看代码
int main(int argc, char* argv[]) { char *filename = "interface_ipset_1_1.json"; char* split1 = "_"; char* split2 = "."; char splitfile1[4][NAME_MAX]; sagent_string_split(filename,split1,splitfile1,4); printf("1 = %s.",splitfile1[0]); reuturn 0;}
int32_t sagent_string_split(char * str, const char * split, char split_str[][NAME_MAX], int32_t max_num) { if (st== NULL || split == NULL || split_str == NULL || max_num <= 0) { printf("sagent_string_split params have error!\n"); } char* result = NULL; char* endstr = NULL; result = strtok_r(str, split,&endstr); int32_t i = 0; while (result ) { if (i >= max_num) { printf("split num is more than max_num = %d.", max_num); return -1; } printf("i = %d,result = %s",i,result); strncpy(split_str[i++], result, NAME_MAX - 1); result = strtok(NULL, split); } return 0; } int main(int argc, char* argv[]) { char *filename = "interface_ipset_1_1.json"; char* split1 = "_"; char* split2 = "."; char splitfile1[4][NAME_MAX]; sagent_string_split(filename,split1,splitfile1,4); printf("1 = %s.",splitfile1[0]); reuturn 0; }
在执行这个程序的时候,报错,Segmentation fault 这个错误,哪踩内存了呢。原来char *filename = "interface_ipset_1_1.json"; 这样声明是 一个常量,不可更改的,而strtok在使用过程中会把它进行修改,造成了错误。所以需要注意。可以这样声明char filename[64] = "interface_ipset_1_1.json"
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。