zoukankan      html  css  js  c++  java
  • 关于使用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"

  • 相关阅读:
    我的 vs code 中setting 设置
    创建Vue cli 脚手架中遇到的空格,函数问题的解决
    C#与.Net的关系
    c#可以开发哪些类型的应用程序
    json注解使用(jackson与fastjson)
    MySQL优化:如何避免回表查询
    二叉树基础知识总结
    Redis,Memcache,MongoDb的特点
    MySQL的InnoDB存储引擎为什么要用自增的主键?
    分布式事务atomikos使用
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7026213.html
Copyright © 2011-2022 走看看