多学学其他的语言还是有好处的,搞了一阵C#之后,发现C#中的split很好用。虽然C也和相应的函数,但是用着有点别扭,因为第一次传入的参数和第二次传入的不一样。再一个是这个函数里面好像使用了静态变量,虽然没验证过,但是怀疑会对多线程的程序有影响,所以,不如自己实现一个比较方但。采用二级指针的方法来记录分割的位置,所以使用前一定要定义一个临时指针指向需要分割的串,否则会产生错误。
代码一:返回0表示分割完成,-1表示缓存空间过小,1表示未分割完成。
int split(char **src, char sign, char *szSaveBuf, int buf_size) { char *dest = szSaveBuf; int cp_byte = 0; for(; **src != sign; (*src)++,dest++) { if(**src == '\0') { return 0; } else { *dest = **src; cp_byte++; if(cp_byte >= buf_size) { //printf("buffer size too short.\n");
return -1; } } } (*src)++; return 1; }
|
代码二,分割的动态分配内存版。
int malloc_split(char **src, char sign, char **szSaveBuf) { char *begin = *src; int len = 0; int flag = 1; for(; **src != sign; (*src)++) { if(**src == '\0') { flag = 0; break; } } len = *src - begin; (*src)++; *szSaveBuf = (char *)malloc(len + 1); if(szSaveBuf == NULL) { return -8; } memset(*szSaveBuf, 0, len + 1); memcpy(*szSaveBuf, begin, len); return flag; }
|
阅读(572) | 评论(0) | 转发(0) |