• C char** 的一点儿理解


    理解是就是char** 相当于字符串数组,我以往纠结于该用 **arr还是*arr还是 (*arr),还是(**arr);

    对于**arr而言:*arr代表数组的最开头,也就是第一个字串的内容。**arr代表什么,不知道,这么用会报错。

    简单的来说arr[0],代表第一个字符串的值,实际指向的整个**arr的首地址,如果用printf之类的处理函数,会把它之后的地址的内容也打印出来,直到找到0。

    下面是一个分割字符串的代码,l会保存分割出来的长度。


    2014-09-09 结构体数组处理:http://blog.csdn.net/leinchu/article/details/11559547

    字符串以为数组实际是2维字符数组,但结构提1维数组就只需要一维——这个问题我没认识清楚,受字符串数组的迷惑,走了不少弯路。


    char** split(char *strin, char *seprator, int *l, int max) {
    	char **rtn;
    	rtn = (char **) malloc(sizeof(char **));
    	char *str = strdup(strin);
    	char *str0 = str;
    	char *p;
    
    	p = strstr(str, seprator);
    	if (p == NULL) {
    		*l = 1;
    		*rtn = str;
    		return rtn;
    	}
    
    	int i, len, spl, inlen, plen;
    	spl = strlen(seprator);
    	max--;
    	*l = 0;
    	while (p != NULL) {
    		if (*l > 0)
    			rtn = realloc(rtn, ((*l) + 1) * sizeof(char **));
    		inlen = strlen(str);
    		plen = strlen(p);
    		if (!plen)
    			break;
    		len = inlen - plen;
    
    		rtn[*l] = malloc(len + 1);
    		strncpy(rtn[*l], str, len);
    		rtn[*l][len] = 0;
    
    		str += (len + spl);
    		p = strstr(str, seprator);
    
    		(*l)++;
    		if (*l == max || p == NULL) {
    			/*if (*l == max) {
    				len = strlen(rtn[*l - 1]) + strlen(str) + 1;
    				rtn[*l - 1] = realloc(rtn[*l - 1], len);
    				strncat(rtn[*l - 1], str, len - 1);
    			} else {*/
    				len = strlen(str);
    				rtn = realloc(rtn, ((*l) + 1) * sizeof(char **));
    				rtn[*l] = malloc(len + 1);
    				strncpy(rtn[*l], str, len);
    				rtn[*l][len] = 0;
    			//}
    			(*l)++;
    			break;
    		}
    	}
    	free(str0);
    	return rtn;
    }




  • 相关阅读:
    python类库31[正则表达式匹配实例]
    Mysql百万级数据迁移实战笔记
    面试官:一千万数据,怎么快速查询?
    为什么MySQL不建议使用NULL作为列默认值?
    Redis各个数据类型最大存储量
    Rabbitmq延迟队列实现定时任务
    PHPstorm批量修改文件换行符CRLF为LF
    使用SeasLog打造高性能日志系统
    协程编程注意事项
    Rabbitmq 安装过程中常见问题(亲测可行)
  • 原文地址:https://www.cnblogs.com/lein317/p/5067552.html
Copyright © 2020-2023  润新知