理解是就是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; }