首页 > 关于使用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!
");}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"



转载于:https://www.cnblogs.com/jzssuanfa/p/7026213.html

更多相关:

  • char* Reverse(char* s) {//将q指向字符串最后一个字符char* q = s ;while( *q++ ) ;q -= 2 ; //分配空间,存储逆序后的字符串。char* p = newchar[sizeof(char) * (q - s + 2)] ; char* r = p ;// 逆序存储whil...

  • 二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {"abc", "def", "ghi"}; 这种模型为二级指针的第一种内存模型,在理解的时候应该这样理解:定义了一个指针数组(char *...

  • wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....#include // 使用CString必须使用MFC,并且不可包含#define _AFXDLL#include us...

  • 问题的提出:设计一个用于管理朋友信息的程序。将朋友信息(年龄、姓名、电话)存放在MyFrd.dat中,从文件读出这些信息并显示,并能按姓名(要求可简化输入,如只输入姓氏便可查询)进行查询,将查询信息输出屏幕。 1 #include 2 #include 3 #include<...

  • MysqlHelper.class.php 1: